exec 去执行sql语句时,会去触动系统存储过程sp_executesqlsp_executesql:只是一系统存储过程,在比较底层运行
解决方案 »
- 脚本临时表与存储过程中临时表重名问题的理论依据是什么
- 怎么关闭和打开sql server2008 所有用户的删除数据库的权限?
- 统计出现点问题
- 如何将一个schema下的所有表、存储和视图copy到我新建的一个schema下
- 关于用VC6.0编写数据库的问题
- 如何获取数据库未有主键的表
- 这样的SQL语句如何写
- 大大帮忙啊!小弟要急用!在线等..........
- SOS,急,在线等待
- 并非老生常谈,PB应用程序发布问题。在WIN2000下编译,用在其中一台95的机子上没有问题,但是,用在另外一台95的机子上却连不上数据库,为什么?数据库用SQL SERVER。
- 求SQL语句..高手请进
- 邹大哥,問題已經發了,請幫幫忙了(這是一個索引頁)
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]作為常量使用還有其它自己雖然明白一點,但講不齣來,隻可意會
--动态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