0

我正在为 Azure 数据仓库编写一个 CREATE TABLE 脚本,它将重新创建分区表的架构。我的脚本具有查询表并从列值创建逗号分隔字符串的重复代码。我试图将这个重复的代码移动到一个单独的函数中,以便它可以被重用。

CREATE FUNCTION [dbo].[fnCreateStringFromColValues] (
    @tblName [NVARCHAR](255)
    , @colName [NVARCHAR](255) 
    , @RNumColName [NVARCHAR](255)
)
RETURNS VARCHAR(MAX)
AS
BEGIN 

    DECLARE @nRows INT = (SELECT count(*) FROM @tblName)
    DECLARE @count INT = 1
    DECLARE @toReturn AS nvarchar(MAX) = ''

    WHILE (@count <= @nRows)
    BEGIN
        DECLARE @column varchar(200) = (SELECT @colName FROM @tblName WHERE @RNumColName = @count1)
        SET @toReturn = @toReturn + @column + ','
        SET @count = @count + 1
    END
    RETURN @toReturn
END

在网上搜索后,我仍然不确定用户定义的函数是如何工作的,以及是否可以实现我想要做的事情。@tblName 可以动态传递吗?我可以在函数中查询传递的表吗?现在,我在尝试创建此函数时收到以下错误“第 16 行解析错误,第 45 列:'@tblName' 附近的语法不正确。”

4

1 回答 1

0

Azure SQL 数据仓库不支持表值参数,但截至 2019 年 7 月,它确实支持强大的字符串操作函数STRING_AGGSTRING_SPLIT. 因此无需创建用户自定义函数,只需使用内置函数即可。

目前在 Azure SQL 数据仓库中运行的一个简单示例:

SELECT object_id, STRING_AGG( name, ', ' ) colList
FROM sys.columns
GROUP BY object_id
于 2019-07-24T11:04:55.813 回答