博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql中EXEC和sp_execsql区别-------------------------------------------待叙写
阅读量:4917 次
发布时间:2019-06-11

本文共 1382 字,大约阅读时间需要 4 分钟。

DECLARE @TableName VARCHAR(50),@sql NVARCHAR(MAX),@OrderID VARCHAR(50) ,@sql2 NVARCHAR(MAX);

SET @TableName = 'Orders ';
SET @OrderID = N'10251';
SET @sql = 'SELECT * FROM '+QUOTENAME(@TableName) + ' WHERE OrderID = '+CAST(@OrderID AS VARCHAR(50)) + ' ORDER BY ORDERID DESC'
EXEC sp_executesql @sql
go

DECLARE @TableName VARCHAR(50),@Sql NVARCHAR(MAX),@OrderID INT;SET @TableName = 'Orders';
SET @OrderID = 10251;
SET @sql = 'SELECT * FROM '+QUOTENAME(@TableName) +'WHERE OrderID = '+CAST(@OrderID AS VARCHAR(10))+' ORDER BY ORDERID DESC'
EXEC(@sql);
--注:这里的EXEC括号中只允许包含一个字符串变量,但是可以串联多个变量,如果我们这样写EXEC:

--EXEC('SELECT TOP('+ CAST(@TopCount AS VARCHAR(10)) +')* FROM '+QUOTENAME(@TableName) +' ORDER BY ORDERID DESC');

--SQL编译器就会报错,编译不通过,而如果我们这样:
EXEC(@sql+@sql2+@sql3)
go

DECLARE @TableName VARCHAR(50),@Sql NVARCHAR(MAX),@OrderID INT;SET @TableName = 'Orders';

SET @OrderID = 10251;
SET @sql = 'SELECT * FROM '+QUOTENAME(@TableName) +'WHERE OrderID = @OrderID ORDER BY ORDERID DESC'
EXEC(@sql);--必须在串联的语句中生命变量@OrderId使用EXEC时,如果您想访问变量,必须把变量内容串联到动态构建的代码字符串中,如:SET @sql = 'SELECT * FROM '+QUOTENAME(@TableName) +'WHERE OrderID = '+CAST(@OrderID AS VARCHAR(10))+' ORDER BY ORDERID DESC'

--串联变量的内容也存在性能方面的弊端。SQL Server为每一个的查询字符串创建新的执行计划,即使查询模式相同也是这样。为演示这一点,先清空缓存中的执行计划

--DBCC FREEPROCCACHE (这个不是本文所涉及的内容,您可以查看MS的MSDN

转载于:https://www.cnblogs.com/Minghao_HU/archive/2012/09/04/2669867.html

你可能感兴趣的文章
SCM_SVN_CVS
查看>>
设计抗混叠滤波器的三大指导原则(转载)
查看>>
join() 和 sleep() 区别
查看>>
MySQL 'localhost' (10061)解决方法
查看>>
信息安全-1:python之playfair密码算法详解[原创]
查看>>
Linq
查看>>
OC中新增的数据类型
查看>>
在自己的iOS程序中引入自定义字体
查看>>
页面的按钮3d效果
查看>>
CSS-微信开放UI样式
查看>>
TensorFlow 学习(2)——正式起步
查看>>
TableViewer使用
查看>>
GDB调试原理——ptrace系统调用
查看>>
包含单引号的sql
查看>>
net2.0对于递归变量的处理方式不同引发的递归问题
查看>>
asp.net 数据库连接 使用事务处理(一)
查看>>
Ionic学习
查看>>
ContentProvider的使用
查看>>
使用聚合接口获取汉字数据字典
查看>>
STM32之DMA实例
查看>>