废话不说,请看我的代码,应该怎么改呢?
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GOALTER 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'。
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GOALTER 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'。
SELECT @RuleIds = 角色编号 FROM 用户信息表 as @TableName where @FieldName = @UserId
应为
SELECT @RuleIds = 角色编号 FROM @TableName where @FieldName = @UserId
--------------------------------------------------------
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GOALTER 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 @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'
'SELECT @RuleIds = 角色编号 FROM''' + @TableName +''' where @FieldName = @UserId'
select @str = 'SELECT @RuleIds = 角色编号 FROM''' + @TableName +''' where @FieldName = @UserId'set @newSql = N' SELECT * FROM 角色功能查询 WHERE (角色编号 in ( ' + @str +'))'
服务器: 消息 137,级别 15,状态 2,过程 用户功能查询过程,行 12
必须声明变量 @FieldName 和 @UserId
@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
SELECT 角色编号 FROM 用户信息表 where 用户编号 = '2' 得到的值为 1,2可是我这么写却出错:
SELECT * FROM 角色功能查询 WHERE (角色编号 in (SELECT 角色编号 FROM 用户信息表 where 用户编号 = '2'))
------------------------运行结果--------------------------------------
服务器: 消息 245,级别 16,状态 1,行 2
将 varchar 值 '1,2' 转换为数据类型为 int 的列时发生语法错误。
----------------------------------------------------------------------
直接输入
SELECT * FROM 角色功能查询 WHERE (角色编号 in (1,2))
就没事。这个问题解决了就结贴。
where B.用户编号 = '2'
paoluo(一天到晚游泳的鱼)
看到这么多星星真晃眼睛 ,
所以不能轻易的放过你。
请问有什么简单的方法能 在存储过程中 将 一条sql语句的返回值 返回给一个变量呢?
就像我上面问题中的一样。我先结贴了。有时间你就说两句。
GO
SET ANSI_NULLS ON
GOALTER PROCEDURE 用户功能查询过程
@UserId varchar(50),
@TableName varchar(50),
@FieldName varchar(50)
as
Declare @dot Varchar(10)
Declare @sqlText Varchar(1000)
Declare @RuleIds varchar(500)--我要用这个结果作为第二个查询的条件
Declare @newSql Varchar(1000) set @sqlText=N'SELECT @RuleIds = 角色编号 FROM @mTableName where @mFieldName = @mUserId'
exec sp_executesql @sqlText,N'@mTableName varchar(50),@mFieldName varchar(50),
@mUserId varchar(50)',
@mTableName=@TableName,@mFieldName=@FieldName,@mUserId=@UserId
-- 你这里“SELECT @RuleIds = 角色编号”应该只能取到一条记录吧-_-
set @newSql = N' SELECT * FROM 角色功能查询 WHERE (角色编号 in ( '''
set @newSql = @newSql + @RuleIds+'''))'
print @newSql
EXECUTE (@newSql)
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GOALTER PROCEDURE 用户功能查询过程
@UserId varchar(50),
@TableName varchar(50),
@FieldName varchar(50)
as
Declare @dot Varchar(10)
Declare @sqlText Varchar(1000)
Declare @RuleIds varchar(500)--我要用这个结果作为第二个查询的条件
Declare @newSql Varchar(1000) set @newSql = N' SELECT * FROM 角色功能查询 WHERE (角色编号 in
( SELECT 角色编号 FROM @mTableName where @mFieldName = @mUserId))'
EXEC sp_executesql @newSql,N'@mTableName varchar(50),@mFieldName varchar(50),@mUserId varchar(50)',
@mTableName=@TableName,@mFieldName=@FieldName,@mUserId=@UserId
这样写,如果在你的动态Sql中含有变量,就要用到sp_executesql,
语法:
exec sp_executesql sql表达式,N'@var1 datatype,@var2 datatype.....'/*语句中出现的变量列表*/,给所有的变量赋值:@var1=@var1.....
希望对你有所帮助