sp_executesql

原创 2007年09月22日 17:50:00
 

HTML Tags and JavaScript tutorial



sp_executesql





以下是SqlServer的联机文档:
执行可以多次重用或动态生成的 Transact-SQL 语句或批处理。Transact-SQL 语句或批处理可以包含嵌入参数。
语法
sp_executesql
[
@stmt

=
]
stmt
[
    
{
,
[
@params

=
]
N'@
parameter_name  data_type
[
,
...
n
]
'
}
    {
,
[
@
param1
=
]
'
value1
'
[
,
...
n
] }
]
参数
[
@stmt

=
]
stmt
包含 Transact-SQL 语句或批处理的 Unicode 字符串,
stmt
必须是可以隐式转换为
ntext
的 Unicode 常量或变量。不允许使用更复杂的 Unicode 表达式(例如使用 + 运算符串联两个字符串)。不允许使用字符常量。如果指定常量,则必须使用 N 作为前缀。例如,Unicode 常量 N'sp_who' 是有效的,但是字符常量 'sp_who' 则无效。字符串的大小仅受可用数据库服务器内存限制。
stmt
可以包含与变量名形式相同的参数,例如:
N'SELECT * FROM Employees WHERE EmployeeID = @IDParameter'
stmt
中包含的每个参数在
@params
参数定义列表和参数值列表中均必须有对应项。
[
@params

=
]
N'@
parameter_name  data_type
[
,
...
n
]
'
字符串,其中包含已嵌入到
stmt
中的所有参数的定义。该字符串必须是可以隐式转换为
ntext
的 Unicode 常量或变量。每个参数定义均由参数名和数据类型组成。
n
是表明附加参数定义的占位符。
stmt
中指定的每个参数都必须在
@params
中定义。如果
stmt
中的 Transact-SQL 语句或批处理不包含参数,则不需要
@params
。该参数的默认值为 NULL。
[
@
param1
=
]
'
value1
'
参数字符串中定义的第一个参数的值。该值可以是常量或变量。必须为
stmt
中包含的每个参数提供参数值。如果
stmt
中包含的 Transact-SQL 语句或批处理没有参数,则不需要值。
n
附加参数的值的占位符。这些值只能是常量或变量,而不能是更复杂的表达式,例如函数或使用运算符生成的表达式。
返回代码值
0(成功)或 1(失败)
示例
A. 执行简单的 SELECT 语句
下面的示例创建并执行一个简单的 SELECT 语句,其中包含名为
@level
的嵌入参数。
execute sp_executesql N'select * from pubs.dbo.employee where job_lvl = @level', N'@level tinyint', @level = 35
B. 执行动态生成的字符串
下面的示例显示使用
sp_executesql
执行动态生成的字符串。该示例中的存储过程用来向一组表中插入数据,该表用于划分一年的销售数据。一年中的每个月均有一个表,格式如下:
CREATE TABLE May1998Sales (OrderID INT PRIMARY KEY, CustomerID INT NOT NULL, OrderDate DATETIME NULL CHECK (DATEPART(yy, OrderDate) = 1998), OrderMonth INT CHECK (OrderMonth = 5), DeliveryDate DATETIME NULL, CHECK (DATEPART(mm, OrderDate) = OrderMonth) )
有关从这些分区表中检索数据的更多信息,请参见
使用包含分区数据的视图

每个表的名称由月份名的前三个字母、年度的四位数字和常量 Sales 组成。名称可以从订单日期动态生成:
/* Get the first three characters of the month name. */SUBSTRING( DATENAME(mm, @PrmOrderDate), 1, 3) +/* Concatenate the four-digit year; cast as character. */CAST(DATEPART(yy, @PrmOrderDate) AS CHAR(4) ) +/* Concatenate the constant 'Sales'. */'Sales'
下面示例中的存储过程动态生成并执行一个 INSERT 语句,向适当的表中插入新订单。该存储过程使用订单日期生成应包含数据的表的名称,然后将名称并入 INSERT 语句。(这是
sp_executesql
的一个简单示例。不包含错误检查,也不包括业务规则检查,例如确保两个表之间订单号没有重复。)
CREATE PROCEDURE InsertSales @PrmOrderID INT, @PrmCustomerID INT, @PrmOrderDate DATETIME, @PrmDeliveryDate DATETIMEASDECLARE @InsertString NVARCHAR(500)DECLARE @OrderMonth INT-- Build the INSERT statement.SET @InsertString = 'INSERT INTO ' + /* Build the name of the table. */ SUBSTRING( DATENAME(mm, @PrmOrderDate), 1, 3) + CAST(DATEPART(yy, @PrmOrderDate) AS CHAR(4) ) + 'Sales' + /* Build a VALUES clause. */ ' VALUES (@InsOrderID, @InsCustID, @InsOrdDate,' + ' @InsOrdMonth, @InsDelDate)'/* Set the value to use for the order month because functions are not allowed in the sp_executesql parameter list. */SET @OrderMonth = DATEPART(mm, @PrmOrderDate)EXEC sp_executesql @InsertString, N'@InsOrderID INT, @InsCustID INT, @InsOrdDate DATETIME, @InsOrdMonth INT, @InsDelDate DATETIME', @PrmOrderID, @PrmCustomerID, @PrmOrderDate, @OrderMonth, @PrmDeliveryDateGO
在该过程中使用
sp_executesql
比使用 EXECUTE 执行字符串更有效。使用
sp_executesql
时,只生成 12 个版本的 INSERT 字符串,每个月的表 1 个。使用 EXECUTE 时,因为参数值不同,每个 INSERT 字符串均是唯一的。尽管两种方法生成的批处理数相同,但因为
sp_executesql
生成的 INSERT 字符串相似,所以查询优化程序更有可能反复使用执行计划。
 


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

sp_executesql

执行可以多次重复使用或动态生成的 Transact-SQL 语句或批处理。Transact-SQL 语句或批处理可以包含嵌入参数。Transact-SQL 语法约定语法 sp_executesql [...

SQLServer : EXEC和sp_executesql的区别

摘要 1,EXEC的使用 2,sp_executesql的使用        MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_exec...

EXEC和sp_executesql的区别有哪些

1、 性能:   官方描述:sp_executesql stmt 参数中的 Transact-SQL 语句或批处理在执行 sp_executesql 语句时才编译。随后,将编译 stmt 中的...

SQLServer : EXEC和sp_executesql的区别

1,EXEC的使用 2,sp_executesql的使用        MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_ex...

sqlserver 动态sql执行execute和sp_executesql

sqlserver 动态sql的执行,有两个方法execute和 sp_executesql.其中第一个方法execute可以简写为exec. execute方法适合执行没有返回值的动态sql,sp_...

EXEC与sp_executesql的区别及应用

execute,简写为exec,除了用来执行存储过程,一般都用来执行动态Sql sp_executesql,sql2005中引入的新的系统存储过程,也是用来处理动态sql的,如:  exec...

EXEC和sp_executesql 区别

MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有。还有一个最大的好处就...

execute sp_executesql 用变量获取返回值

最近用到,在网上查了下资料 注意加粗部分,sp_executesql 的参数必须为UNICODE,即NCHAR,NVARCHAR,NTEXT型,否则报错 动态sql语句基本语法 1 :普通SQ...

sp_executesql介绍和使用

sp_executesql介绍和使用 execute相信大家都用的用熟了,简写为exec,除了用来执行存储过程,一般都用来执行动态Sql  sp_executesql,sql2005中引入的新的系统存...

用exec sp_executesql @sql,N'@b int output',@b output 取出查询到@sql的数

USE [wwdthdb00] GO /****** Object:  StoredProcedure [dbo].[wwdadm_lottery]    Script Date: 06/24/201...
  • suhu1
  • suhu1
  • 2013-06-24 21:44
  • 581
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)