关于表名作为参数的问题
废话不说,请看我的代码,应该怎么改呢? 
 SET   QUOTED_IDENTIFIER   ON    
 GO 
 SET   ANSI_NULLS   ON    
 GO   
 ALTER      PROCEDURE   用户功能查询过程    
 @UserId   varchar(50), 
 @TableName   varchar(50), 
 @FieldName   varchar(50) 
 as 
 Declare   @dot   Varchar(10) 
 Declare   @sqlText   Varchar(1000) 
 Declare   @RuleIds   varchar(500)--我要用这个结果作为第二个查询的条件   
 SELECT   @RuleIds   =   角色编号   FROM   用户信息表   as   @TableName      where   @FieldName   =   @UserId 
 Declare   @newSql   Varchar(1000)   ;    
 set   @newSql   =   N '   SELECT   *   FROM   角色功能查询      WHERE   (角色编号   in   (    '    
 set   @newSql   =   @newSql   +   @RuleIds+ ')) ' 
 print   @newSql 
 EXECUTE   (@newSql) 
 --------------------执行结果--------------------------- 
 服务器:   消息   137,级别   15,状态   2,过程   用户功能查询过程,行   12 
 必须声明变量    '@TableName '。
------解决方案--------------------表做參數就必須用動態SQL。 
  'SELECT @RuleIds = 角色编号 FROM ' ' ' + @TableName + ' ' ' where @FieldName = @UserId ' 
------解决方案--------------------楼上的,你的也不对。我估计还会提示 
 服务器: 消息 137,级别 15,状态 2,过程 用户功能查询过程,行 12 
 必须声明变量 @FieldName 和 @UserId 
------解决方案--------------------改用CharIndex   
 ALTER PROCEDURE 用户功能查询过程 
 @UserId varchar(50), 
 @TableName varchar(50), 
 @FieldName varchar(50) 
 as 
 Declare @newSql Varchar(1000) 
 set @newSql =  'Select A.* FROM 角色功能查询 A Inner Join  ' + @TableName +  ' B ON CharIndex( ' ', ' ' + Cast(A.角色编号 As Varchar) +  ' ', ' ',  ' ', ' ' + B.角色编号 +  ' ', ' ') >  0 
 Where B. ' + @FieldName +  ' =  ' ' ' + @UserId +  ' ' ' ' 
 EXECUTE (@newSql) 
 GO