关于表名作为参数的问题
废话不说,请看我的代码,应该怎么改呢?
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