Как мы можем использовать EXEC sp_executesql для двух динамических операторов SQL? - PullRequest
3 голосов
/ 07 сентября 2011

таблица:

create table TabA
             (ID int, Name varchar(20))
             insert into  TabA
             select 1,'ABC' union
             select 2,'DEF' union
             select 3,'GHD' 

create table TabB
             (ID int, Name varchar(20))
             insert into  TabA
             select 1,'XYZ' union
             select 2,'STF' union
             select 3,'LDZ' 

create table status
             (Result1 int,Result2 int )

Create table query(query1 varchar(1000),query2  varchar(1000))

             Insert into query(query1,query2)
             select  '''select COUNT(*) from TabA''','''select COUNT(* )from TabB'''
             select * from query

процедура:

create  Procedure [dbo].spStatus
AS
BEGIN

  SET NOCOUNT ON;


Declare  @sqlString1 nvarchar(1000)
    ,@sqlString2 nvarchar(1000)
     ,@col_value1 varchar(256) 
    ,@col_value2 varchar(256)

   select @sqlString1 = query1
         , @sqlString2 =query2         

      from Query


        EXEC sp_executesql                       

         @query=@sqlString1, --sql string is your full select  statement                       

           @params = N'@col_Value1 varchar(256)  OUTPUT',                

            @col_Value1 = @col_Value1 OUTPUT
           print(@sqlString1)

           --  @sqlString2, --sql string is your full select  statement                       

           --@params = N'@col_Value2 varchar(256)  OUTPUT',                

           -- @col_Value2 = @col_Value2 OUTPUT


        Insert Into dbo.Status(Result1,Result2 )
        Values(@col_Value1,@col_Value2)



End

Это работает, если мы используем только @query=@sqlString1, но я хочу, чтобы оба оператора @query=@sqlString1,@query=@sqlString2 выполнялись вместе.

Пожалуйста, помогите, как мы можем использовать оба оператора для выполнения?

Заранее спасибо

Ответы [ 3 ]

3 голосов
/ 07 сентября 2011

Вы имели в виду:

SET @sqlString1 = @sqlString1 + ';' + @sqlString2;

EXEC sp_executesql @query = @sqlString1 --...
1 голос
/ 07 сентября 2011

Объедините два запроса вместе с + (@query=@sqlString1 + '; ' + @sqlString2)

. Затем используйте две переменные для записи двух подсчетов в выходные переменные

ИЛИ

Insert into query(query1,query2)
    EXEC  sp_executesql 'SELECT ( select COUNT(*) from TabA ) AS query1, ( select COUNT(*)from TabB )  AS query2'

.... но действительно и действительно динамический SQL для этого вообще не нужен.

0 голосов
/ 07 сентября 2011

попробуйте это:

--add this
DECLARE @SQL nvarchar(max)
SET @SQL=ISNULL(@sqlString1,'')+';'+ISNULL(@sqlString2,'')

--change this
EXEC sp_executesql @query=@SQL
    ,@params = N'@col_Value1 varchar(256)  OUTPUT'
    ,@col_Value1 = @col_Value1 OUTPUT
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...