获取动态SQL查询语句返回值(sp_executesql)
2014-11-06 20:00
169 查看
在写存储过程时经常会遇到需要拼接SQL语句的情况,一般情况下仅仅是为了执行拼接后的语句使用exec(@sql)即可。
而今天的一个存储过程却需要获取动态SQL的查询结果。
需求描述:在某表中根据Id值查询Cost值(表名不确定但表结构确定,如下面的Product表)
如果不考虑获取返回值,我们这样写即可:
要获取返回值首先尝试的是下面两个方法:
以上两种方法均会报错,求助万能的网络发现一个可爱的函数--sp_executesql可以满足我们的要求:
不仅能获取返回值,还能传参有没有!只可惜表名依然需要拼接在SQL语句中。
注意:@sql的类型需要是'ntext/nchar/nvarchar'这三种之一。
园友万德源的sp_executesql介绍和使用帖中有关于此函数更详细的介绍。
而今天的一个存储过程却需要获取动态SQL的查询结果。
需求描述:在某表中根据Id值查询Cost值(表名不确定但表结构确定,如下面的Product表)
如果不考虑获取返回值,我们这样写即可:
declare @tableName varchar(50) declare @id varchar(10) declare @cost numeric(18,2) declare @sql nvarchar(200) set @tableName='Product' set @id='1' set @sql='select Cost from '+@tableName+' where Id='+@id exec(@sql)
要获取返回值首先尝试的是下面两个方法:
set @sql='select @cost=Cost from '+@tableName+' where Id='+@id --错误方法1
set @cost=(exec(@sql)) --错误方法2
以上两种方法均会报错,求助万能的网络发现一个可爱的函数--sp_executesql可以满足我们的要求:
set @sql='select @cost=Cost from '+@tableName+' where Id=@id' exec sp_executesql @sql, N'@cost numeric(18,2) out,@id varchar(10)', @cost out,@id
不仅能获取返回值,还能传参有没有!只可惜表名依然需要拼接在SQL语句中。
注意:@sql的类型需要是'ntext/nchar/nvarchar'这三种之一。
园友万德源的sp_executesql介绍和使用帖中有关于此函数更详细的介绍。
相关文章推荐
- 获取动态SQL查询语句返回值(sp_executesql)
- 转贴自微软MSDN:建议执行动态SQL时,使用sp_executesql 存储过程而不要使用EXECUTE 语句
- 动态SQL的执行,注:exec sp_executesql 其实可以实现参数查询和输出参数的
- SqlServer动态执行SQL语句sp_executesql、Exec
- SQL动态语句 -- 获取动态语句返回值
- MSSQL 动态加载 SQL语句 (sp_executesql)
- 动态SQL的执行,注:exec sp_executesql 其实可以实现参数查询和输出参数的
- sp_executesql动态执行sql语句并将结果赋值给一变量
- 动态SQL的执行,注:exec sp_executesql 其实可以实现参数查询和输出参数的
- 动态sql语句的执行(sp_executesql)
- sqlserver中sp_executesql使用实例(获取动态sql输出结果)
- sqlserver中sp_executesql使用实例(获取动态sql输出结果)
- SQL:行合并问题 & 使用 SP_executesql 从exec('SQL语句') 中得到一个返回值
- SQL server 动态查询(表名或字段动态),并且获取想得到的返回值结果( exec sp_executesql )
- SqlServer动态执行SQL语句sp_executesql、Exec
- 从sp_executesql中返回table型数据及动态SQL语句的参数化查询
- 表名作存储过程参数 使用sp_executesql动态语句
- sqlserver exec sp_executesql 动态给变量赋值
- sp_executesql和存储过程中组合SQL语句
- LINQ to SQL语句之动态查询高级特性