Запустите запрос из параметра 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 (или выполнить результаты).

Другие вопросы по тегам