首页  ·  知识 ·  数据库
sp_executesql和存储过程中组合SQL语句
音乐啤酒    MS-SQL  编辑:dezai   图片来源:网络
存储过程有时候要实现比复杂的方法,其中有的手段就是要组合sql语句

存储过程有时候要实现比复杂的方法,其中有的手段就是要组合sql语句

declare @TestSql nvarchar(1000)

set @TestSql = 'select * from tablename'

就像这种方式一样,当然上面的只是一个事例

组合sql要先区分几种错误的概念

1,对于表名,列名,字段名都是不能使用变量的。

比如这个方式

declare @tableName varchar(100)

declare @Sql varchar(1000)

set @tableName ='userinfo'

set @Sql = 'select * from @tableName'

执行这种方式是会报错的。字段也是其中道理

组合sql,最后使用exec(@Sql)可以执行,这是一种比较简单实现方式,就是一个参数,组合的sql语句。

另外一种是比较复杂的方式就是sp_executesql,这个方式也是执行组合sql,但是功能 更多,更强大。因为他是可以嵌入参数的

sp_executesql [ @stmt = ] stmt
[
{, [@params=] N'@parameter_name data_type [ [ OUT [ PUT ][,...n]' }
{, [ @param1 = ] 'value1' [ ,...n ] }
]

这是语法格式。第一个参数就是组合的sql语句,后面的就是参数。

一个例子
DECLARE @SQLString nvarchar(500);

SET @SQLString = N'SELECT * FROM AdventureWorks.HumanResources.Employee WHERE ManagerID = @ManagerID';
EXECUTE sp_executesql @SQLString, N'@ManagerID tinyint', @ManagerID = 200

需要注意的是组合sql必须是nvarchar,ntext类型,字符串前面可以加N字母。

后面参数的具体格式。就是组合sql,第二就是sql中出现的@变量。声明他的类型,第3个参数就是对参数赋值

 

2,一个复杂例子,多个参数和参数输出类型

现在组合sql中多个参数,而且要求有输出参数,就是那个数量。我也是在编程中发现这个问题,才研究sp_executesql的

declare @Sql nvarchar(500)

declare @Count int

set @Sql = 'select @num = count(*) from tableName where uid = @UID'
EXECUTE sp_executesql @Sql,'@num int output,@UID int',@Count output,@UID =3

print @Count

这样就ok了

需要注意的是。第二个输入参数中的sql中参数,必须按先后顺序进行声明。否则就有错误,我测试中是这样的。

本文作者:音乐啤酒 来源:网络
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读