sp_executesql не запускает sql используя предложение with - PullRequest
0 голосов
/ 02 июня 2018

в работе мы используем основанные на компании тестовые рамки.Вы просто сохраняете свой тестовый запрос в определенном столбце в определенной таблице, затем выполняете хранимую процедуру, которая вызывает sp_executesql для выполнения запроса, затем регистрирует результаты и все.Сегодня я построил тестовый запрос, используя предложение.После выполнения запроса внутри фреймворка я получаю эту ошибку каждый раз, когда запускаю запрос с оператором WITH .: «Неверный синтаксис рядом с ключевым словом« With »».Но когда я запускаю запрос так же, как sql select, я получаю результаты, поэтому запрос работает нормально.Я просто не могу выполнить запрос с помощью оператора sp_executesql.У меня вопрос, можно ли вообще выполнить запрос с помощью предложения with в команде sp_executesql?Или как я могу справиться с этой ситуацией?Любые советы?

Это мой запрос:

With source_state as (
select 
  DISPLAY_VALUE as DISPLAY_VALUE 
 ,FL_SIEBEL as FL_SIEBEL
 ,ID_CONSENT_ACTION as ID_CONSENT_ACTION 
 ,LANG_INDEPENDENT_CODE as LANG_INDEPENDENT_CODE
from [dbo].[DM_CONSENT_ACT]
),
target_state as (
 select 
  DISPLAY_VALUE as DISPLAY_VALUE 
 ,FL_SIEBEL as FL_SIEBEL
 ,ID_CONSENT_ACTION as ID_CONSENT_ACTION 
 ,LANG_INDEPENDENT_CODE as LANG_INDEPENDENT_CODE
 --select *
from [dbo].[DM_LD_CONSENT_ACT2]
where isnull(dt_eff_to,@param1)>@param2
)
, pocet  as 
(SELECT * FROM source_state   EXCEPT  SELECT  t.* FROM target_state as t  )
, pocet2 as 
(SELECT * FROM target_state   EXCEPT  SELECT  t.* FROM source_state as t  )
select (select COUNT(*) from pocet) + (select COUNT(*) from pocet2)

Это часть хранимой процедуры, где я запускаю код:

 DECLARE tables_cursor_params CURSOR  
       FOR  
       SELECT NAME   
       FROM TF_PARAMS

       OPEN tables_cursor_params

       DECLARE @Name varchar(100)  

       FETCH NEXT FROM tables_cursor_params INTO @Name
       WHILE (@@FETCH_STATUS <> -1)  
       BEGIN  

        declare @getParam nvarchar(max)
        declare @sqlGetParam nvarchar(max) = 'select @getParam = VALUE from [dbo].[TF_PARAMS] where NAME = '''+@Name+''''
        print @sqlGetParam
        declare @Param varchar(max)
        exec sp_executesql @sqlGetParam, N'@getParam varchar(max) out', @Param out
        set @v_sql_a_replaced = replace(@v_sql_a_replaced, '@'+@Name, ''''+@Param+'''')
        print @v_sql_a_replaced
          FETCH NEXT FROM tables_cursor_params INTO @Name 
       END

       CLOSE tables_cursor_params  
       DEALLOCATE tables_cursor_params

Cheers!Юзеф

...