--proc  DECLARE @dt NVARCHAR(50)
SELECT @dt=MainRoom_ET FROM Fhome f WHERE f.UserId=3
PRINT @dt
--这样可以得到@dt
--
--如果MainRoom_ET为变量时
--DECLARE @dt NVARCHAR(50)
DECLARE @table_ET NVARCHAR(50)
DECLARE @str2 NVARCHAR(200)
SET @table_ET='MainRoom_ET';
SET @str2='SELECT '''+@dt+'''='+CONVERT(NVARCHAR(50), @table_ET) +' FROM Fhome f WHERE f.UserId=3'
EXEC(@str2)
PRINT @dt
--或
DECLARE @dt NVARCHAR(50)
DECLARE @table_ET NVARCHAR(50)
DECLARE @str2 NVARCHAR(200)
SET @table_ET='MainRoom_ET';
SELECT @dt=CONVERT(NVARCHAR(50), @table_ET) FROM Fhome f WHERE f.UserId=3
PRINT @dt
--都得不到 @dt 的值?--当MainRoom_ET 字段名为传递过来的变量时怎么把字段里的值放入@dt变量?
--自定义函数 和output 参数 也考虑过啦  
 
 

解决方案 »

  1.   

    declare @SQLString nvarchar(200)
    declare @where nvarchar(200)
    declare @column nvarchar(200)
    set @where ='where f.a=1'
    set @column ='a'
    declare @ParmDefinition nvarchar(200)
    SET @SQLString =
         N'SELECT @ResultNUM='+@column+' from t1 f  '+@where;
    SET @ParmDefinition = N'@ResultNUM int output';
    DECLARE @ResultNUM INT;
    EXECUTE sp_executesql @SQLString, @ParmDefinition   ,@ResultNUM   output       
    SELECT @ResultNUM
      

  2.   


    DECLARE @dt NVARCHAR(50)
    DECLARE @table_ET NVARCHAR(50)
    DECLARE @str NVARCHAR(200)
    SET @table_ET='MainRoom_ET';
    set @str = N'select @dt= '+@table_ET+' FROM  f WHERE f.UserId=3'
    exec sp_executesql @str,N'@dt NVARCHAR output',@dt output
    select @dt
    PRINT @dt
      

  3.   


    declare @SQLString nvarchar(200)
    DECLARE @table_ET NVARCHAR(50)
    DECLARE @str2 NVARCHAR(200)
    SET @table_ET='MainRoom_ET';declare @ParmDefinition nvarchar(200)
    SET @str2 =
         N'SELECT @dt='+@table_ET+' FROM Fhome f WHERE f.UserId=3'
    SET @ParmDefinition = N'@dt NVARCHAR(50) output';
    DECLARE @dt NVARCHAR(50);
    EXECUTE sp_executesql @str2, @ParmDefinition   ,@dt   OUTPUT
    SELECT @dt这个可以
      

  4.   

    DECLARE @dt NVARCHAR(50)
    DECLARE @table_ET NVARCHAR(50)
    DECLARE @str2 NVARCHAR(200)
    SET @table_ET='MainRoom_ET';
    DECLARE @dt NVARCHAR(50)
    DECLARE @table_ET NVARCHAR(50)
    DECLARE @str2 NVARCHAR(200)
    SET @table_ET='MainRoom_ET';
    SELECT @dt=CONVERT(NVARCHAR(50), @table_ET) FROM Fhome f WHERE f.UserId=3
    PRINT @dtPRINT @dt这样之后,
    sql 就成了
    SELECT @dt=CONVERT(NVARCHAR(50), 'MainRoom_ET') FROM Fhome f WHERE f.UserId=3