Pregunta

I want to get the value of two variables from dynamic sql .

declare @sImport_Table1 table 
 (
   Id int identity(1,1) ,
   Zone nvarchar(50),
   Sub_Code nvarchar(50),
   Geography nvarchar(50),
   DayOfWeek nvarchar(50)
 )



INSERT INTO @sImport_Table1 SELECT 'A','Z','Geo','SUN'

declare @sZone nvarchar(50)
declare @sSubCode nvarchar(50)
declare @c_Geography nvarchar(50)='Geo'
declare @c_DayOfWeek nvarchar(50)='SUN'
declare @sImport_Table nvarchar(500)='@sImport_Table1'



--SELECT * FROM @sImport_Table1
declare @sQuery nvarchar(4000) 

SET @sQuery='SELECT @sZone = Zone, '+
                   '@sSubCode = Sub_Code
          FROM '+ @sImport_Table +
         ' WHERE Geography ='''+ @c_Geography + '''
          AND [DayOfWeek] = '''+ @c_DayOfWeek +''''

PRINT @sQuery 

sp_executesql @sQuery)

PRINT @sZone 
PRINT @sSubCode    
¿Fue útil?

Solución

You will need to declare this table variable inside the Dynamic sql as dynamic sql has its own scope, variable declared outside of dynamic sql are not visible inside dynamic sql.

And also use OUTPUT clause when trying to retrieve values from a dynamic sql query. Something like this....

declare @sZone nvarchar(50)
declare @sSubCode nvarchar(50)
declare @c_Geography nvarchar(50)='Geo'
declare @c_DayOfWeek nvarchar(50)='SUN'
declare @sImport_Table nvarchar(500)='@sImport_Table1'



--SELECT * FROM @sImport_Table1
declare @sQuery nvarchar(MAX); --<-- to be on safe side 

SET @sQuery = N' declare @sImport_Table1 table 
                     (
                       Id int identity(1,1) ,
                       Zone nvarchar(50),
                       Sub_Code nvarchar(50),
                       Geography nvarchar(50),
                       DayOfWeek nvarchar(50)
                     )
               INSERT INTO @sImport_Table1 SELECT ''A'',''Z'',''Geo'',''SUN''

               SELECT @sZone = Zone, @sSubCode = Sub_Code ' +
              N' FROM @sImport_Table1 ' + 
              N' WHERE Geography =  @c_Geography  ' +
              N' AND [DayOfWeek] =  @c_DayOfWeek '

PRINT @sQuery 

EXECUTE sp_executesql @sQuery
                     ,N'@c_Geography nvarchar(50),@c_DayOfWeek nvarchar(50),
                        @sZone nvarchar(50) OUTPUT, @sSubCode nvarchar(50) OUTPUT'
                     ,@c_Geography , @c_DayOfWeek, @sZone OUTPUT, @sSubCode OUTPUT
SELECT @sSubCode, @sZone

Otros consejos

Replace sp_executesql @sQuery)

with

execute sp_executesql @sQuery

Also in dynamic queries you need to declare variables inside your dynamic string. Otherwise it will throw error.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top