MSSQLSERVER数据库- SP_EXECUTESQL的使用

EXEC和SP_EXECUTESQL有什么区别呢?

1,它们之间最大的区别是嵌入式的参数,如下面一个语句

declare @sql nvarchar(2000)
declare @id varchar(20)
set @id=‘1‘
set @sql=‘select count(*) from emp where id=‘ + @id
exec @sql 

我想把得到的count(*)传出来,用传统的exec是不好办到的,但是用sp_executesql则很容易就办到了,如下:

DECLARE @strSql NVARCHAR(2000);
DECLARE @Params NVARCHAR(2000);
DECLARE @sl INT;

SET @strSql = ‘SELECT @sl = COUNT(*) FROM dbo.SHANGPIN‘;
SET @Params = ‘@sl int out‘
EXEC sp_executesql @strSql,@Params,@sl OUT
PRINT @sl;

2.性能 
可以看到,如果用exec,由于每次传入的@id不一样,所以每次生成的@sql就不一样,这样每执行一次Sql2005就必须重新将要执行的动态Sql重新编译一次 
但是sp_executesql则不一样,由于将数值参数化,要执行的动态Sql永远不会变化,只是传入的参数的值在变化,那每次执行的时候就秒用重新编译,速度自然快多了

MSSQLSERVER数据库- SP_EXECUTESQL的使用

时间: 2024-10-28 15:38:19

MSSQLSERVER数据库- SP_EXECUTESQL的使用的相关文章

MS-sqlserver数据库2008如何转换成2000

http://bbs.csdn.net/topics/390438560?page=1#post-394316973 MS-sqlserver数据库2008如何转换成2000 回你这个贴等于我写个博客差不多了步骤1:步骤2:步骤3:把脚本拖到2000的查询分析器界面,然后点运行,2000以前的我不清楚,但是从2000开始的所有SQLServer版本F5都是运行的意思....你不会没用过SQLServer吧?生成完之后步骤4:按照我文章中的那个步骤的截图打开导入导出工具,然后一直点下去,注意在[目

mssqlserver数据库自动备份

1.新建作业2.添加常规3.添加步骤,选择T-SQL 输入下面语句(databasename修改为自己的数据库名称.D:bak改为自己的备份路径) DECLARE @strPath NVARCHAR(200) set @strPath = convert(NVARCHAR(19),getdate(),120) set @strPath = REPLACE(@strPath, ':' , '.') set @strPath = 'D:bak' + @strPath + '.bak' BACKUP

MSSQLSERVER数据库- 作业调度定时备份数据库

作业调度和备份数据库是常见的行为,掌握这两项技术我觉的非常有必要. 在网上找到这个示例,记录在这里 备份数据库的SQL语句 --自动备份并保存最近5天的SQL数据库作业脚本 DECLARE @filename VARCHAR(255) DECLARE @date DATETIME SELECT @date=GETDATE() SELECT @filename = 'G:\存放位置\数据库名称-'+CAST(DATEPART(yyyy,@date) as varchar)+'-'+CAST(DAT

MSSQLSERVER数据库- 配置数据库邮件配置的操作过程

还是第一次发现数据库可以发邮件.查了一下百度,试了一下,发现可以. 1.简单了解数据库邮件的概念和使用的传输协议及系统体系: 数据库邮件是从 SQL Server 数据库引擎中发送电子邮件的企业解决方案.通过使用数据库邮件,数据库应用程序可以向用户发送电子邮件.邮件中可以包含查询结果,还可以包含来自网络中任何资源的文件. 无需 Microsoft Outlook 或扩展消息处理应用程序编程接口(扩展 MAPI).数据库邮件使用标准的简单邮件传输协议 (SMTP) 发送邮件.无须在运行 SQL S

MSSQLSERVER数据库- 数据类型Timestamp

Timestamp:亦称时间戳数据类型,它提供数据库范围内的惟一值,反应数据库中数据修改的相对顺序,相当于一个单调上升的计数器.当它所定义的列在更新或者插入数据行时,此列的值会被自动更新,一个计数值将自动地添加到此Timestamp数据列中.如果建立一个名为“Timestamp”的列,则该列的类型将自动设为Timestamp数据类型. 一个表只能有一个TimeStamp列,可以使用TimeStamp列的值判断自从上次检索之后是否有其他进程修改数据行.在应用程序中,检查TimeStamp列的值提供

获取mssqlserver数据库表的字段名称,字段说明,数据类型,主键等表的信息

sql脚本: SELECT TableName=case when a.colorder=1 then d.name else '' end,---表名 TableShowsThat=case when a.colorder=1 then isnull(f.value,'') else '' end,---表说明 TheSerialNumberField=a.colorder,---字段序号 FieldName=a.name,---字段名 Identification=case when COL

MSSQLSERVER数据库- LEFT JOIN后面跟着WHERE竟变成内联 解决方法

在LEFT JOIN后面跟着WHERE竟变成内联.百度后看到这个解决方法. 记录如下: select sre.*, co.description from subscribedratingelement sre left outer join custom_options co on sre.locationInCdr=co.optionvalue where co.optionname='LocationInCdr'; select sre.*, co.description from sub

SQL数据库第一部分

数据库:程序用来存取数据的 ACCESS:自带,比较小,不是很专业 SQL Server:主要用在.NET语言中,比较专业.微软开发 MYSQL:主要用在PHP语言中,比SQL server体积比较小 oracle:主要用在Java中 每个数据库都有相应的语言. 主要是因为连接比较方便,其他也可以连接,但是可能比常用的要麻烦一些. 数据库有两个部分:界面+服务 服务是可以操作的后台的程序. 界面是可以看到数据库的数据的程序. 服务和界面是可以分离的 只有服务也是可以单独使用的. 服务开启 控制面

SQL(一)——数据库基础知识

SQL:Structured Quety Language SQL SERVER是一个以客户/服务器(c/s)模式访问.使用Transact-SQL语言的关系型数据库管理子系统(RDBMS) DBMS :Database Management System数据库管理系统 数据库:程序用来存取数据的 ACCESS:自带,比较小,不是很专业 SQL Server:主要用在.NET语言中,比较专业.微软开发 MYSQL:主要用在PHP语言中,比SQL server体积比较小 oracle:主要用在Ja