Запустите запрос из параметра OUTPUT хранимой процедуры
Следующий скрипт предназначен для получения динамически созданного оператора SQL и его запуска. Сценарий будет запущен, но он не возвращает ожидаемые результаты, а текст строки динамического SQL. Полученная строка - это строка, которую мне нужно запустить, но она вызывается 32 раза (странное число, я не знаю, почему это так). Кто-нибудь видит, почему это не просто возврат результирующего набора динамически созданного оператора SQL? SQL Server 2008 R2
Для записи SQL Server интерпретировал запрос как 32 различных оператора выбора, каждый в своей строке.
Возвращенная строка
SELECT DISTINCT x.patid
FROM (SELECT ic.patid
FROM icdclm AS ic
WHERE ic.icd LIKE '123%') AS x1
INNER JOIN (SELECT ic.patid
FROM icdclm AS ic
WHERE ic.icd LIKE '456%') x2
ON x2.patid = x1.patid
INNER JOIN (SELECT ic.patid
FROM icdclm AS ic
WHERE ic.icd LIKE '456%') x3
ON x3.patid = x1.patid
INNER JOIN (SELECT ic.patid
FROM icdclm AS ic
WHERE ic.icd LIKE '456%') x4
ON x4.patid = x1.patid
INNER JOIN (SELECT ic.patid
FROM icdclm AS ic
WHERE ic.icd LIKE '456%') x5
ON x5.patid = x1.patid
Мой код, который выдает приведенную выше строку вместо выполнения этого SQL:
ALTER PROC Getmultiplecomorbidquery (@sqlquery NVARCHAR(1000) output)
AS
DECLARE @x INT,
@y INT,
@sql NVARCHAR(1000)
SELECT @x = 1,
@y = 5,
@sql = 'select distinct x.patid from ( select ic.patid from icdClm as ic where ic.icd like ''123%'' ) as x' + Cast(@x AS CHAR(1))
WHILE @x < @y
BEGIN;
SET @sql=@sql + ' inner join ( select ic.patid from icdClm as ic where ic.icd like ''456%'' ) x' + Cast(@x+1 AS CHAR(1)) + ' on x'
+ Cast(@x+1 AS CHAR(1))
+ '.patid=x1.patid'
SET @x=@x + 1
END;
SET @sqlquery = @sql
SELECT @sql
code i used to call
DECLARE @sqlquery NVARCHAR(1000)
SET @sqlquery=''
EXECUTE dbo.Getmultiplecomorbidquery
@sqlquery output
SELECT @sqlquery
1 ответ
Вы никогда не выполняете запрос, просто возвращаете его, вам нужен EXECUTE @sql (или выполнить результаты).