sql 存储过程 拼字符串赋值问题~~~

SQL code

declare @sql varchar(1000)
declare @time datetime
set @sql = 'select @time = getdate()'
exec (@sql)


必须声明标量变量 "@time"。
这个问题怎么解决?
需求:
1、@time 在下文中使用,不能声明在串中。
2、执行的sql只能用串拼出来。

怎么才能得到@time值?

作者: my_1234   发布时间: 2011-06-14

如果在动态语句字符串中含有变量,则不能直接用exec执行,要用SP_EXECUTESQL系统存储过程来执行. 
给个例子你看一下,聪明的你应该能学会:
SQL code
create table tablea(bh nvarchar(10))
insert into tablea select 'kafd'
insert into tablea select 'keins'
insert into tablea select 'euwnq'
go
declare @bh nvarchar(30),
  @a nvarchar(100),
  @wh nvarchar(50),
  @dd nvarchar(50)

set @bh='bh'
set @wh='k'
set @a='select @ddOUT=isnull(max('+@bh+'),'''') from tablea where ('+@bh+' like '''+@wh+'%'')'
set @a='select @dd=isnull(max('+@bh+'),'''') from tablea where ('+@bh+' like '''+@wh+'%'')'
exec SP_EXECUTESQL @a,N'@dd varchar(50) output ',@dd output 
select @dd
/*
--------------------------------------------------
keins

(1 行受影响)

*/

作者: qianjin036a   发布时间: 2011-06-14

SQL code

declare @a int;
declare @sql nvarchar(4000);
set @a=1;
SET @sql='select @b  set @b=@b+1 select @b';

exec sp_executesql @sql, N'@b int output', @b=@a;


类似这样,用sp_executesql即可。

作者: maco_wang   发布时间: 2011-06-14

SQL code

declare @a int
declare @sql nvarchar(1000)    --注意不要写成varchar
set @a=1
SET @sql=N'select @b  set @b=@b+1 select @b'
exec sp_executesql @sql, N'@b int output', @b=@a

作者: AcHerat   发布时间: 2011-06-14

SQL code
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 

作者: fredrickhu   发布时间: 2011-06-14