CTOCIO IT专家网

天极传媒 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
IT专家网搜索

数据库 | Oracle | DB2 | SQL Server | MySQL | 商业智能 | BI | DBA | Sybase| SQL Server 2008

您现在的位置: IT专家网 > 数据库子站 > 数据库技巧

在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专家网原创文章,未经许可,严禁转载!

共3页。 9 1 2 3

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。
  • 周排行榜
  • 月排行榜

邮件订阅


    
天极服务 | 关于我们 | 网站律师 | 加入我们 | 联系我们 | 广告业务 | 友情链接 | 我要挑错
All Rights Reserved, Copyright 2004-2008, Ctocio.com.cn
渝ICP证B2-20030003号 如有意见请与我们联系 powered by 天极内容管理平台CMS4i