sp_executesql 过程与 exec 关键字区别
sp_executesql 可以在动态 sql 中使用变量,并且将变量输出
exec 则只能执行动态 sql 和 存储过程(执行过程不需要加小括号,执行动态 sql 则必须加小括号)
----------------------------------------------------------------------------------
declare @count int
declare @sql1 nvarchar(100)
declare @sql2 nvarchar(100)
declare @str nvarchar(10)
--1 执行需要为变量赋值的动态 sql
set @str='1'
set @sql1='select @count1=COUNT(*) from Base_Product where 1=@str1'
print @sql1-- 调试信息输出
--注意:执行 sp_executesql 存储过程不需要加 小括号 ,加了就报错!
EXECUTE sp_executesql
@sql1,
N'@count1 int output,@str1 varchar(10)',
@count1 = @count output,@str1=@str
select @count --查看统计数
--2 执行普通动态 sql
set @sql2='select top 10 * from Base_Product'
print @sql2-- 调试信息输出
EXECUTE (@sql2) --注意:这里如果加小括号为执行 sql 语句,不加小括号默认为执行'存储过程'
/*
对 sp_executesql 存储过程做个说明
第一个参数:
很明显是要执行的拼接后的 sql 语句了,其中@count1、@str1为占位符,
为了测试所以选择了一个int和一个nvarchar 类型做测试
第二个参数:
这个参数是对第一个参数中的‘占位符’进行说明和定义用的
需要动态执行的脚本: 'select @count1=COUNT(*) from Base_Product where 1=@str1'
对占位符进行的说明: N'@count1 int output,@str1 varchar(10)'
如果动态脚本中有多个占位符时,需要在说明字符串中使用‘逗号’隔开,
如果需要在执行‘动态sql’后得到其中参数的值,需要为其标注为 output,即 @count1 int output
第三个参数到第N个参数:
这个参数是对‘占位符’中变量与实际变量绑定用的,
如果在第二个参数中标记‘站位符’为 output ,这里也需要进行一下标记
即:@count1 = @count output
(注意‘占位符’中的变量名不需要加单引号)
sp_executesql 语法详见:
http://msdn.microsoft.com/zh-cn/library/ms188001.aspx
*/
/*转载保留:www.iqingcao.com*/
分享到:
相关推荐
SQL Server EXEC和sp_executesql的区别
3、EXEC 执行纯动态SQL,执行时可能无法使用预编译的执行计划,关键是不安全,可以导致 SQL 注入 ,而 SP_EXECUTESQL 执行参数化动态 SQL ,执行时能使用预编译的执行计划,而且保存存储过程时就可以确定可以使用的预...
摘要1,EXEC的使用2,sp_executesql的使用MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有。还有一个最大的好处就是利用...
sp_executesql 执行可以多次重用或动态生成的 Transact-SQL 语句或批处理。Transact-SQL 语句或批处理可以包含嵌入参数。 语法 sp_executesql [@stmt =] stmt [ {, [@params =] N’@parameter_name...
declare @LikeSql nvarchar(32);–定义一个like变量,如果是存储过程,此处可以存储过程的参数 set @LikeSql = ‘someword%’;...—使用@LikePar变量进行参数化 exec sp_executesql @SelectSql ,N’@LikePa
动态SQL 并且把返回的值赋给变量,sp_executesql,动态sql语句基本语法
sp_dboption函数命令SQLserver2008以上版本适用 SQLserver2008以上版本,不再支持sp_dboption函数,但你可以下载sp_dboption函数,在master直接执行,后面就可以使用sp_dboption函数命令
动态sql语句基本语法 1 :普通SQL语句可以用Exec执行 例: Select * from tableName ... exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name --请注意参数的顺序 (2)输出参数
重要: 对于SQLSVR2008以后的版本, 不可以直接附加MDF文件的方式加载NorthWind数据库, 只能以instnwnd.sql方式创建(含数据), 但是在执行过程中提示缺少过程sp_dboption, 需要先在MASTER库下执行sp_dboption.sql创建sp...
kettel循环执行动态sql,
sp_executesql 使用复杂的Unicode 表达式错误的解决方法,需要的朋友可以参考下
创建SP_WHO_LOCK死锁信息临时表,查询数据库死锁信息,方便解决数据库锁库问题。
判断execute(sql)执行成功与否,帮助更好的控制代码操作性
可以针对已经加密的SQL存储过程进行解密的存储过程,适用于:SQL2000
cn_sql_server_2014_enterprise_edition_x64_dvd_3932882.iso,数据库安装镜像
l_retval := dbms_sql.execute(l_cursor); --6.取数 --6.1取列名 for i in 1..l_colcnt loop dbms_output.put(l_col_tab(i).col_name); dbms_output.put(' '); end loop; while dbms_sql.fetch_rows(l_cursor)>0 ...