动态语句语法exec和sp_executesql语法的区别.docVIP

动态语句语法exec和sp_executesql语法的区别.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
动态语句语法exec和sp_executesql语法的区别

动态语句语法exec和sp_executesql语法的区别 动态语句语法: --方法1查询表改为动态 select * from sysobjects exec(select ID,Name from sysobjects) exec sp_executesql Nselect ID,Name from sysobjects--多了一个N为unicode --方法2:字段名,表名,数据库名之类作为变量时,用动态SQL declare @FName varchar(20) set @FName=ID exec(select +@FName+ from sysobjects where +@FName+=5 ) declare @s varchar(1000) set @s=Nselect +@FName+ from sysobjects where +@FName+=5 exec sp_executesql @s--会报错 declare @s nvarchar(1000)--改为nvarchar set @s=Nselect +@FName+ from sysobjects where +@FName+=5 exec sp_executesql @s--成功 --方法3:输入参数 declare @i int,@s nvarchar(1000) set @i=5 exec(select ID,Name from sysobjects where ID=+@i) set @s=select ID,Name from sysobjects where ID=@i exec sp_executesql @s,N@i int,@i--此处输入参数要加上N --方法4:输出参数 declare @i int,@s nvarchar(1000) set @s=select @i=count(1) from sysobjects --用exec exec(declare @i int +@s+ select @i)--把整个语句用字符串加起来执行 --用sp_executesql exec sp_executesql @s,N@i int output,@i output--此处输出参数要加上N select @i --方法5:输入输出 --用sp_executesql declare @i int,@con int,@s nvarchar(1000) set @i=5 select @s=select @con=count(1) from sysobjects where ID@i exec sp_executesql @s,N@con int output,@i int,@con output ,@i select @con --用exec declare @i int,@s nvarchar(1000) set @i=5 select @s=declare @con int select @con=count(1) from sysobjects where ID+rtrim(@i)+ select @con exec(@s) 1、EXEC命令的括号中只允许包含一个字符串变量,或者一个 字符串文本,或者字符串变量与字符串文本的串联。不能再括号中使用函数或CASE表达式,如下面尝试在括号中调用QUOTENAME函数以引用对象名称,运行将失败: 1: DECLARE @schemaname NVARCHAR(255),@tablename NVARCHAR(128) 2: SET @schemaname=dbo 3: SET @tablename=Order Details 4: 5: EXEC (NSELECT COUNT(*) FROM +QUOTENAME(@schemaname)+N.+QUOTENAME(@tablename)+N;) 上述代码将会产生如下错误: 消息 102,级别 15,状态 1,第 5 行 QUOTENAME 附近有语法错误。 SQL Server 分析和编译时间: CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 SQL Server 执行时间: CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 所以做好的方法是把代码构造到一个变量中,这样就不会受限制了,然后再把该变量作为EXEC命令的输入参数,就像这样: 1: DECLARE @schemaname NVARCHAR(255) , 2: @tablename NVARCHAR(128) , 3: @sql NVARCHAR(MAX)

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档