动态语句语法:exec\sp_executesql语法
2009年10月28日 10:23:51   点击(1674)   评论(2)   [网络转载]

--方法1查询表改为动态
select * from sysobjects
exec('select ID,Name from sysobjects'
)
exec sp_executesql N'select ID,Name from sysobjects'--多了一个N为unicode

 


--方法2:字段名,表名,数据库名之类作为变量时,用动态SQL
declare @FName varchar(20)
set @FName='ID'

exec('select '+@FName+' from sysobjects where '+@FName+'=5' )


declare @s varchar(1000
)
set @s=N'select '+@FName+' from sysobjects where '+@FName+'=5'

exec sp_executesql @s--会报错


declare @s nvarchar(1000)--改为nvarchar
set @s=N'select '+@FName+' from sysobjects where '+@FName+'=5'
exec sp_executesql @s--成功

 


--方法3:输入参数

declare @i int,@s nvarchar(1000)
set @i=5

exec('select ID,Name from sysobjects where ID='+@i)

set @s='select ID,Name from sysobjects where ID=@i'

exec sp_executesql @s,N'@i int',@i--此处输入参数要加上N

 

 

--方法4:输出参数

declare @i int,@s nvarchar(1000)
set @s='select @i=count(1) from sysobjects'


--用exec
exec('declare @i int '+@s+' select @i')--把整个语句用字符串加起来执行

--用sp_executesql
exec sp_executesql @s,N'@i int output',@i output--此处输出参数要加上N
select @i

 

 


--方法5:输入输出

--用sp_executesql
declare @i int,@con int,@s nvarchar(1000)
set @i=5

select @s='select @con=count(1) from sysobjects where ID>@i'
exec sp_executesql @s,N'@con int output,@i int',@con output ,@i
select @con


--用exec
declare @i int,@s nvarchar(1000)
set @i=5

select @s='declare @con int select @con=count(1) from sysobjects where ID>'+rtrim(@i)+' select @con'
exec(@s)

 

 

实例:

   问题:

declare @test varchar(1000)
declare @total Integer
SET @test= '21,23,24,25,26,27'

EXEC ('
   declare @count Integer
   select @count=count(*) from NeiEntityContainmentTable
   WHERE myentitytype in (' + @test + ')')

我想将@count的结果返回到@total中,如何???



回答:

---------------------------------------------------------------

declare @test Nvarchar(1000)
declare @total Int
declare @sql Nvarchar(1000)

SET @test= N'21,23,24,25,26,27'

set @sql=N'
   select @count=count(*) from NeiEntityContainmentTable
   WHERE myentitytype in (' + @test + N')'

exec   sp_executesql   @sql,   N'@count   int output',   @total   output

Time:2010-01-26 17:19:28   IP:221.223.55.127
测试下评论
Time:2010-01-26 18:46:59   IP:218.30.107.228
用得着测试嘛
< 第一页 | 上一页 | 1 | 下一页 | 最末页 >
评论:
验证码:
© 2009 TingHaoJi.COM All Rights Reserved.Power By:雪人归来 QQ:395898939