高手解说一下exec动态执行的原理!
关exec和sp_executesql的执行原理或者它们是怎样执行任务的! 问题点数:20、回复次数:5Top
1 楼zhangjian01361(★非也非也★)回复于 2005-12-01 13:58:05 得分 0
不会吧!这个问题竟然没有人知道?Top
2 楼lsqkeke(可可)回复于 2005-12-01 14:36:41 得分 0
我也不知道 !
帮你顶! :)Top
3 楼lsp69(浪子神剑)回复于 2005-12-01 16:42:39 得分 2
exec 去执行sql语句时,会去触动系统存储过程sp_executesql
sp_executesql:只是一系统存储过程,在比较底层运行Top
4 楼qiqingshizhe(凄清使者)回复于 2005-12-01 16:44:41 得分 8
首先從兩者的使用語法上,前者為:
exec(@string)
@string是一個字符串常量,它的值與一般的(非動態)tranact—sql語句是等價的,執行結果輸齣,還有他不能傳帶變量。在exec語句執行前,不會編譯exec語句內的語句
后者:
exec sp_executesql @string,N'@params1 data_type,@params2 data_typt....',
@par1,@par2,.....
可以嵌入參數.各個常量,變量必須是可以隱式轉換為ntext的unicode編碼的數據類型
如果數據@params[x]在執行過程要輸齣,則在后麵加上‘output’,在后麵@par[y]中定義
一個output類型,那么@par[y]=@params[x]返囬,可以將@pqr[y]作為常量使用
還有其它自己雖然明白一點,但講不齣來,隻可意會。。。。。。Top
5 楼wangtiecheng(不知不为过,不学就是错!)回复于 2005-12-01 16:48:30 得分 10
--动态sql语句用法
--1 :普通SQL语句可以用Exec执行
--eg:
Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N
--2:字段名,表名,数据库名之类作为变量时,必须用动态SQL
--eg:
declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格
--当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'FiledName' --设置字段名
declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错
declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确
--3. 输出参数
declare @num int,
@sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)
--如何将exec执行结果放入变量中?
declare @num int,
@sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num
Top
相关问题
- 可执行的电子书、可执行的FLASH是什么原理
- SQL数据库执行的原理与过程是什么?
- exec 执行SQL的问题
- exec执行的问题,急
- 求助:在com组件之间聚合的时候,内部组件的委托和非委托接口的实现原理,谁可以解说一下!
- 高分急请帮我解说一下课题《概念形成原理的研究和实现》----人工智能方向的
- 拨号上网的执行过程是怎么样的??(用上网卡,电话线,着重原理)
- 拨号上网的执行过程是怎么样的??(用上网卡,电话线,着重原理)
- EXEC执行有错( TraToTime between ''' + @begintime+''' and ''' +@ endtime+ ''' )'
- Runtime.getRuntime().exec(command)强制执行问题




