2014-05-15 57 views
-1
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 

***************编辑******************** ************PRINT不打印动态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  

回答

1

你有@sZone@sSubCode这是null。与null连接总是null

这可能是有道理的。

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

请注意,DayOfWeek是保留字,必须包含在方括号内。

+0

实际上我想EXEC(@sQuery)并通过动态SQL执行在变量中获取ZONE和SUB_Code的值。 – rahularyansharma

+0

您不能使用'EXECUTE'来传入IN/OUT参数。使用'sp_executesql'。 –

+0

请检查问题的编辑部分。 sp_executesql引发错误。 – rahularyansharma