动态SQL

SQL Server允许用字符串来动态构建T-SQL代码的一个批处理,接着再执行这个批处理。

这种功能称为动态SQL(dynamic SQL)。SQL Server提供了两种执行动态SQL的方法:

使用Exec命令和使用sp_executesql存储过程。

常在“查询条件不固定”,“改善特定任务的性能”场景下应用。

 

EXEC命令

Exec接受一个字符串作为输入参数,执行里面的批处理代码。Exec及支持普通字符,也支持Unicode字符。

DECLARE @Msg AS varchar(100);

SET @Msg = 'PRINT ''HELLO WORLD''';

EXEC(@Msg)

 

sp_executesql存储过程

Sp_executesql既接受输入参数也接受输出参数,与Exec命令不同的是,他只支持Unicode字符。

Sp_executesql存储过程有两个输入参数和一个参数赋值部分。在第一个参数@stmt中,需要指定包含想要执行的代码Unicode字符串。第二个参数@param是一个Unicode字符串,包含@stmt中所有输入,输出参数,接着为它们指定类型,用逗号分隔。

指定参数更有助于写出更安全和更有效的代码,就可以不必受SQL注入的困扰了。

DECLARE @sql AS nvarchar(100) = N'SELECT * FROM T_Order Where OrderID > @OrderID And CustID = @CustID'

-- And CustID = @CustID

exec sp_executesql

@stmt = @sql,

@params = N'@OrderID AS INT,@CustID AS INT',

@OrderID = 1,

@CustID = 1

Sp_executesql存储过程在性能上也比EXEC命令更好,因为它的参数化有助于重用缓存过的执行计划。

执行计划:执行计划是SQL Server为查询生成的物理处理计划,包含了一组指令,说明要访问哪些对象,以什么顺序,使用哪个索引,如何访问它们,使用什么链接算法等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值