`
ljzforever
  • 浏览: 117519 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

sql2005中的execute与sp_executesql

    博客分类:
  • sql
阅读更多
execute相信大家都用的用熟了,简写为exec,除了用来执行存储过程,一般都用来执行动态Sql
sp_executesql,sql2005中引入的新的系统存储过程,也是用来处理动态sql的,如:
exec sp_executesql @sql, N'@count int out,@id varchar(20)', @cou out
,@id
@sql为拼成的动态sql
N'@count int out,@id varchar(20)'为拼成的动态sql内的参数列表
@cou out,@id为为动态sql内参数列表提供值的外部参数列表

那么它们之间有什么区别呢?

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 @sql nvarchar(2000)
declare @cou int
declare @id varchar(20)
set @id='1'
set @sql='select @count=count(*) from emp where id=@id'
exec sp_executesql @sql, N'@count int out,@id varchar(20)', @cou out
,@id
print @cou
2.性能
可以看到,如果用exec,由于每次传入的@id不一样,所以每次生成的@sql就不一样,这样每执行一次Sql2005就必须重新将要执行的动态Sql重新编译一次
但是sp_executesql则不一样,由于将数值参数化,要执行的动态Sql永远不会变化,只是传入的参数的值在变化,那每次执行的时候就秒用重新编译,速度自然快多了哈!

注意:
1.sp_executesql要求动态Sql和动态Sql参数列表必须是Nvarchar,比如上个例子的@sql,N'@count int out,@id varchar(20)'我记得在sql2005中Varchar也可以的,但是我打了Sp3补丁后就不行了,必须为Nvarchar
2.动态Sql的参数列表与外部提供值的参数列表顺序必需一致,如:
N'@count int out,@id varchar(20)', @cou out,@id
@count 对应 @cou,@id对应@id
如果不一致,必须显式标明,如:
N'@count int out,@id varchar(20)', @id=@id, @count=@cou out
3.动态SQl的参数列表与外部提供参数的参数列表参数名可以同名
分享到:
评论

相关推荐

    SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别.doc

    `SP_EXECUTESQL`是在SQL Server 2005中引入的,用于处理更复杂动态SQL语句的系统存储过程。相比`EXEC`,它更加灵活,支持嵌入式参数,包括输入参数和输出参数。以下是如何使用`SP_EXECUTESQL`的例子: ```sql ...

    SQL Server EXEC和sp_executesql的区别

    ### SQL Server EXEC与sp_executesql的区别详解 #### 一、引言 在SQL Server中,执行动态SQL或存储过程时,开发人员通常面临选择使用`EXEC`还是`sp_executesql`的问题。这两种方法虽然都能达到目的,但在功能、性能...

    系统存储过程,sp_executesql

    `sp_executesql`是SQL Server中的一个系统存储过程,用于执行可以动态生成或重复使用的Transact-SQL语句和批处理。这个过程对于运行基于输入参数的动态SQL非常有用,能够提高代码的可重用性和安全性,因为它有助于...

    SQLServer:探讨EXEC与sp_executesql的区别详解

    在SQL Server中,`EXEC` 和 `sp_executesql` 都是用来动态执行SQL语句的命令,但它们之间存在着显著的区别。这篇文章将详细解析这两个命令的用途、优缺点以及如何选择适合的使用场景。 首先,`EXEC` 命令主要用于...

    在sp_executesql中使用like字句的方法

    declare @LikeSql nvarchar(32);–定义一个like变量,如果是存储过程,此处可以存储过程的参数 set @LikeSql = ‘someword%’;...—使用@LikePar变量进行参数化 exec sp_executesql @SelectSql ,N’@LikePa

    动态SQL 并且把返回的值赋给变量

    #### 动态SQL与`sp_executesql` 动态SQL是指在运行时构建的SQL语句,这种类型的SQL可以在不知道确切查询细节的情况下执行。动态SQL的一个主要优点是灵活性:它可以根据用户的输入或程序的运行状态自动生成不同的...

    .NET调试问题 拒绝了对对象 'sp_sdidebug'

    其中,`sp_sdidebug`是一个与调试相关的存储过程,用于.NET Framework 2.0及更高版本中,它主要用于帮助开发者调试代码中的问题。 #### 二、错误原因分析 当开发者遇到“拒绝了对对象 'sp_sdidebug' 的访问权限”...

    在Sql Server查询语句中能不能用变量表示表名

    这通常涉及将字符串拼接成完整的SQL命令,然后使用`EXEC`或`sp_executesql`存储过程来执行这个命令。下面是一个简单的例子: ```sql DECLARE @tableName NVARCHAR(100) = 'MyTable'; DECLARE @sqlCommand NVARCHAR...

    sp_executesql 使用复杂的Unicode 表达式错误的解决方法

    在SQL Server中,`sp_executesql`是一个存储过程,用于执行动态生成的Transact-SQL语句。这个过程在处理动态SQL时非常有用,尤其是当你需要根据运行时的条件来构建查询时。然而,当你试图使用复杂的Unicode表达式,...

    sql query examples.rar_Sql queries_query_random_sql

    例如,通过`sp_executesql`存储过程执行动态生成的SQL。 每个子文件(如soale2.sql, SQLQuery9.sql等)可能包含了上述一种或多种技术的实例。通过学习和实践这些例子,我们可以更好地理解和掌握在实际环境中如何...

    sql.rar_exec select_select_sql select from exec_普通sql大全

    Exec sp_executesql N select * from tableName -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg: declare @fname varchar(20) set @fname = FiledName Select @...

    SQL Server 2005 中做全文检索的方法分享

    在SQL Server 2005中,全文检索是一种强大的功能,它允许用户通过自然语言查询来搜索数据库中的文本数据,而不仅仅是基于精确匹配的关键词。全文检索提供了更高级的搜索能力,例如模糊匹配、近义词搜索和短语搜索。...

    判断execute(sql)执行成功与否

    在IT领域,特别是数据库操作与Web开发中,正确判断SQL语句执行的成功与否对于确保程序稳定性和数据一致性至关重要。本文将深入探讨如何有效地判断`execute(sql)`方法执行的结果,并通过具体的示例代码来帮助理解这一...

    dynamic_sql.rar_notes sql server

    动态SQL通常通过EXEC或sp_executesql存储过程来执行。其基本语法如下: ```sql DECLARE @sql NVARCHAR(MAX); SET @sql = N'Your SQL statement here'; EXEC sp_executesql @sql; ``` 或者 ```sql DECLARE @sql ...

    sysservers 中找不到服务器,请执行 sp_addlinkedserver 将该服务器添加到sysserver

    在SQL Server数据库管理系统中,`sysservers` 是一个系统表,用于存储关于已链接服务器的信息。当尝试连接到不在 `sysservers` 表中的远程服务器时,可能会遇到“sysservers 中找不到服务器,请执行 sp_...

    sql_code1.rar_sql 2000 word

    CREATE PROCEDURE用于创建存储过程,EXECUTE或sp_executesql调用执行。 10. 触发器:触发器是数据库响应特定事件时自动执行的SQL语句集合,常用于实现业务规则或数据完整性。 这些基础语法构成了SQL Server 2000中...

    分页存储过程,仅适用于Sql2005以上,使用 ROW_NUMBER()函数用于多表分页查询,可以分组查询

    3. **执行 SQL 语句获取总记录数和总页数**:使用 `sp_executesql` 执行构造好的 SQL 语句,并通过输出参数返回总记录数和总页数。 4. **构造分页查询语句**: - 根据用户指定的排序字段和方式构造 `ROW_NUMBER()` ...

Global site tag (gtag.js) - Google Analytics