mssql:sp_executesql与exec(@sql)
2015-08-02 22:21
375 查看
sp_executesql
位于master库下的一个扩展存储过程。用于执行一段sql代码。例子:
declare @count int
,@tableName varchar(50)
,@SQLString nvarchar(max)
,@proid int
,@id int
,@ParmDefinition nvarchar(max)
,@msg varchar(50)
set @tableName='he';
set @proid=887;
set @id=159;
set @msg='';
set @SQLString=N'select @countOUT=@proid1+1,@msg= @tableName+''llo''';
set @ParmDefinition=N'@proid1 int,@countOUT int output,@msg varchar(50) output,@tableName varchar(50)';
exec sp_executesql @SQLString,@ParmDefinition,@proid1=@proid,@countOUT=@count output,@msg=@msg output,@tableName=@tableName;
select @count,@msg;
@sqlstring :就是你要执行的sql语句字符串,一定要声明为nvarchar类型,最大长度为4000个字符。
@ParmDefinition: @sqlstring里边用到的参数在这里声明,输出的参数要加output
最后的参数加output的参数是输出的参数(需要和外部的相对应的变量建立关联)
中间的参数就是@sqlstring 里边用到的参数(需要和外部的相对应的变量建立关联)
最后你可以 select 输出的参数 来查询
注意:output变量并不是返回值,而是需要事先定义好再传进去,类似c#中的ref。
exec(@sql)
可以执行普通给的sql和拼接的sql语句,但不能将@sql的执行结果赋值给外部变量。例子:
Exec('select* from tableName')
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N
例子2:
declare @fname varchar(20)
set @fname = 'FiledName'
Exec('select ' + @fname + ' fromtableName')
优点:exec所执行的字符串是varchar类型,它的最大长度可以达到8000.
exec(@sql) 什么时候比sp_executesql好用?
答案:当执行结果不需要赋值给外部变量,且执行的字符串长度大于4000.sp_executesql执行的@sql语句必须是nvarchar,而nvarchar最大长度是4000,超长则造成字符串截断,此时如果采用exce()则可以执行varchar类型,长度可达8000.
我们可以采取字符串拼接的方式,将外部变量中的值传入@sql,例如:
Declare @分数 int=97
@sql='
select 姓名 from studenta
join score b ona. ID =b. ID
where b.score='''+@分数+'''
'
Exec(@sql)
相关文章推荐
- 风清杨之Oracle的安装与说明
- window上安装 MongoDB PHP扩展
- Oracle学习之DATAGUARD(一) DG架构
- MongoDB大文件存储流程
- Oracle经典20题
- 使用wamp集成开发环境,dos命令下数据库乱码解决问题
- ubuntu-12.04.5-desktop-i386.iso:ubuntu-12.04.5-desktop-i386:安装Oracle11gR2
- ubuntu-14.04.2-desktop-i386.iso:ubuntu-14.04.2-desktop-i386:安装Oracle11gR2
- ubuntu-15.04-desktop-i386.iso:ubuntu-15.04-desktop-i386:安装Oracle11gR2
- php 操作mongodb
- 使用Jedis无法访问Redis的问题
- MySql命令导入导出数据方法分享
- SqliteDatabase之分页加载
- SqliteDatabase之如何读取数据库()
- 几点建议,让Redis在你的系统中发挥更大作用
- SqliteDatabase之SqliteOpenHelper_封装方法
- 【DB.MySQL】在Mac如何启动MySQL
- MySql学习:索引
- SqliteDatabase之SqliteOpenHelper(1)
- mysql备份与恢复