码迷,mamicode.com
首页 > 数据库 > 详细

sp_executesql的用法

时间:2017-10-26 18:10:45      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:har   tle   where   sql 语句   ble   eve   def   输出   外部   

需求:表名是动态的,必须用exec来执行,然后在exec里边还得给变量动态赋值  这时候exec 就搞不定了

exec(‘select @count=count(empid) from ‘+@tableName+‘ where proid=‘+@proid+‘ and id<‘+@id+‘ and state!=4‘)

下边这个代码如果去掉where后边的东东就是可以的

一:正确

set @sql=N‘select @count=count(empid) from ‘+@tableName
exec sp_executesql @sql,N‘@count int output ‘,@count output
select @count

二:错误
set @sql=N‘select @count=count(empid) from ‘+@tableName+‘ where proid=‘+@proid+‘ and id<‘+@id+‘ and state!=4‘
exec sp_executesql @sql,N‘@count int output ‘,@count output
select @count

三:正确(我的例子包含表名,表名不可以直接和proid1一样 表名必须要用 ‘+表名+’ ,不加的我试过了报错)
declare @count int,@tableName nvarchar(50),@SQLString nvarchar(max),@proid int,@id int,@ParmDefinition nvarchar(max);
set @tableName=‘table27‘;
set @proid=433;
set @id=159;
--set @sql=N‘select @count=count(empid) from table27‘
set @SQLString=N‘select @countOUT=count(empid) from ‘+@tableName+‘ where proid=@proid1 and id<@id1 and state!=4‘;
set @ParmDefinition=N‘@proid1 int,@id1 int,@countOUT int output‘;
exec sp_executesql @SQLString,@ParmDefinition,@proid1=@proid,@id1=@id,@countOUT=@count output;
select @count;

官方的例子:

DECLARE @IntVariable int;
DECLARE @SQLString nvarchar(500);
DECLARE @ParmDefinition nvarchar(500);
DECLARE @max_title varchar(30);

SET @IntVariable = 197;
SET @SQLString = N‘SELECT @max_titleOUT = max(Title)
FROM AdventureWorks.HumanResources.Employee
WHERE ManagerID = @level‘;
SET @ParmDefinition = N‘@level tinyint, @max_titleOUT varchar(30) OUTPUT‘;

EXECUTE sp_executesql @SQLString, @ParmDefinition, @level = @IntVariable, @max_titleOUT=@max_title OUTPUT;
SELECT @max_title;
MSDN的解释:

执行可以多次重复使用或动态生成的 Transact-SQL 语句或批处理。Transact-SQL 语句或批处理可以包含嵌入参数。

MSDN的语法:
sp_executesql [ @stmt = ] stmt
[
{, [@params=] N‘@parameter_name data_type [ OUT | OUTPUT ][,...n]‘ }
{, [ @param1 = ] ‘value1‘ [ ,...n ] }
]


@sqlstring :就是你要执行的sql语句字符串
@ParmDefinition: @sqlstring里边用到的参数在这里声明 输出的参数要加output
sp_executesql:
第一个参数sqlstring 就是执行的sql字符串了
第二个参数@ParmDefinition是@sqlstring里边用到的参数在这里声明 输出的参数要加output
最后的参数加output的参数是输出的参数(需要和外部的相对应的变量建立关联)
中间的参数就是@sqlstring 里边用到的参数(需要和外部的相对应的变量建立关联)
最后你可以 select 输出的参数 来查询(select @count)

sp_executesql的用法

标签:har   tle   where   sql 语句   ble   eve   def   输出   外部   

原文地址:http://www.cnblogs.com/sensenwang/p/7738176.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!