Хранимая процедура: получение ошибки Необходимо объявить скалярную переменную @id. при выполнении процедуры

Мне нужна помощь в создании хранимой процедуры в SQL Server.

это мой код

CREATE PROCEDURE [dbo].[PROC_TABLE_ELEMENTS] 
    @id nvarchar(max)
AS
    DECLARE @sql varchar(max) = '', @col_list varchar(max) = ''

    SET @col_list = (SELECT DISTINCT QOUTENAME(columnName) + ',' 
                     FROM VW_FORM_ELEMENTS_DATA
                     FOR XML PATH(''))

    SET @col_list = LEFT(@col_list, LEN(@col_list) - 1)

    SET @sql = N'SELECT [newId], [modifiedDate], [modifiedBy], [modifiedBy]' + @col_list + 
                ' FROM (SELECT newId, value, columnName, modifiedDate, modifiedBy 
                        FROM VW_FORM_ELEMENTS_DATA 
                        WHERE newId = @id) a
                  PIVOT
                      (MAX([value]) FOR [columnName] IN (' + @col_list + ')) pv'

    EXEC (@sql)

Я получаю эту ошибку:

Необходимо объявить скалярную переменную @id.


person Christian Lacuesta    schedule 29.01.2021    source источник
comment
Добавьте @id в качестве параметра в execute. В противном случае значение недоступно для динамического SQL.   -  person HABO    schedule 30.01.2021
comment
Пожалуйста, поделитесь образцами данных и желаемым результатом.   -  person Kazi Mohammad Ali Nur    schedule 30.01.2021


Ответы (2)


это работает:

CREATE PROCEDURE [dbo].[PROC_TABLE_ELEMENTS] 
@id nvarchar(max)
AS

declare @sql varchar(max)='',@col_list varchar(max)=''


set @col_list = (select distinct quotename(columnName)+',' from VW_FORM_ELEMENTS_DATA
for xml path(''))

set @col_list = left (@col_list,len(@col_list)-1)


set @sql = 'select [screenId],[newId],[modifiedDate],[modifiedBy],[modifiedBy]'+@col_list+' from
(SELECT screenId, newId, value, columnName, modifiedDate, modifiedBy FROM VW_FORM_ELEMENTS_DATA where screenId = ''' + @id + ''') a
pivot (max([value]) for [columnName] in ('+@col_list+'))pv'

exec (@sql)
person Christian Lacuesta    schedule 29.01.2021
comment
это решение будет работать, только если есть только 1 набор результатов - person Christian Lacuesta; 30.01.2021

Это должно работать в SQL Server.

введите здесь описание изображения

person Kazi Mohammad Ali Nur    schedule 29.01.2021
comment
Большое спасибо. Кази, это было действительно полезно. - person Christian Lacuesta; 29.01.2021
comment
возникла проблема с его запуском - person Christian Lacuesta; 29.01.2021
comment
Удачи в работе. - person Kazi Mohammad Ali Nur; 29.01.2021
comment
@ChristianLacuesta, возможно, вы случайно отменили принятый результат. - person Kazi Mohammad Ali Nur; 29.01.2021
comment
ваш ответ, сэр, не сработал. простите. - person Christian Lacuesta; 29.01.2021
comment
Это нормально. совершенно никаких проблем. Но на снимке экрана видно, что это сработало. удачи. - person Kazi Mohammad Ali Nur; 29.01.2021
comment
Пожалуйста, не используйте изображения для отображения текста. Для кода и результатов/ошибок просто покажите отформатированный текст. Легче для всех. - person Dale K; 30.01.2021