Можно ли передать таблицу в качестве параметра пользовательской функции в SQL ADW, которая будет запрашиваться внутри функции? - PullRequest
0 голосов
/ 13 мая 2019

Я пишу сценарий CREATE TABLE для хранилища данных Azure, который будет воссоздавать схему многораздельной таблицы. Мой сценарий имеет повторяющийся код, который запрашивает таблицу и создает разделенную запятыми строку из значений столбцов. Я пытаюсь переместить этот повторяющийся код в отдельную функцию, чтобы его можно было повторно использовать.

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 »."

1 Ответ

0 голосов
/ 24 июля 2019

Хранилище данных SQL Azure не поддерживает табличные параметры, но по состоянию на июль 2019 года оно поддерживает мощные функции обработки строк STRING_AGG и STRING_SPLIT. Таким образом, нет необходимости создавать пользовательские функции, просто используйте встроенные.

Простой пример, который работает в хранилище данных SQL Azure на сегодняшний день:

SELECT object_id, STRING_AGG( name, ', ' ) colList
FROM sys.columns
GROUP BY object_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...