在SQL Server中生成动态SQL语句
作者: 阿林, 出处:IT专家网, 责任编辑: 李书琴,
2008-04-14 09:37
一个动态的SQL语句是在执行时创建的,不同的条件生成不同的SQL语句。在我们需要决定运行时有哪些字段从SELECT语句返回时,在决定查询的不同标准时,动态地创建这些语句是很有用处的。
| DROP PROCEDURE usp_GetSalesHistory GO CREATE PROCEDURE usp_GetSalesHistory ( @WhereClause NVARCHAR(2000) = NULL, @TotalRowsReturned INT OUTPUT ) AS BEGIN DECLARE @SelectStatement NVARCHAR(2000) DECLARE @FullStatement NVARCHAR(4000) DECLARE @ParameterList NVARCHAR(500) SET @ParameterList = '@TotalRowsReturned INT OUTPUT' SET @SelectStatement = 'SELECT @TotalRowsReturned = COUNT(*) FROM SalesHistory ' SET @FullStatement = @SelectStatement + ISNULL(@WhereClause,'') PRINT @FullStatement EXECUTE sp_executesql @FullStatement, @ParameterList, @TotalRowsReturned = @TotalRowsReturned OUTPUT END GO |
在上面过程中,笔者需要声明一个参数列表,以传递给sp_executesql存储过程,因为在运行时将一个值分配给了变量。对sp_executesql调用的唯一一个变化是在usp_GetSalesHistory存储过程中,笔者将从调用中得到的输出参数分配给了本地的@TotalRowsReturned参数。
我们还可以用与以前类似的方式调用usp_GetSalesHistory存储过程,不过在此增加了一个输出参数,用以指明返回的行。
| DECLARE @WhereClause NVARCHAR(2000), @TotalRowsReturned INT SET @WhereClause = 'WHERE Product = ''Computer''' EXECUTE usp_GetSalesHistory @WhereClause = @WhereClause, @TotalRowsReturned = @TotalRowsReturned OUTPUT SELECT @TotalRowsReturned |
小心为妙
虽然笔者并不极力推荐动态SQL语句,但它确实是一个有用的工具。如果你决定要将动态SQL语句集成到实际的代码中,需谨慎对待。因为这种代码可以将一些潜在的漏洞引入到你的系统中;如果你认真对待了,这种代码可以灵活为你地解决一些问题。
IT专家网原创文章,未经许可,严禁转载!
- 本文关键词:

