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
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
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.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.