如何把一个变量动态生成的语句结果再斌给另一个变量。如果
set @a="select sum(a) from t1 where id=1"exec(@a)
的结果
100哪如何让这个结果斌给@b ?
我用
set @b=exec(@a)
和
set @b=(exec(@a))
都不行。
set @a="select sum(a) from t1 where id=1"exec(@a)
的结果
100哪如何让这个结果斌给@b ?
我用
set @b=exec(@a)
和
set @b=(exec(@a))
都不行。
解决方案 »
- 【SQL2005】一段代码,菜鸟求助
- 求行列传换的办法,多列
- sqlserver 把A表值更新到B表
- sql 问题 select 的时候 自动生成增长列
- 能否写这样一个视图:视图中一列是另外一个表中sum()(group by排序),详细见正文。解决即给分!
- 上网后sqlserver进程总是占用50-70%的cpu使用率,请问如何关闭xp下1433的端口
- 提取字符串该用什么sql函数?
- 一天遇到无数个这种错误,寻求解决。LOB data type node does not exist
- 有难度又好理解的问题?关于数据库建模
- 请教各位大侠?不想在增加或修改的数据中存在着相同的数据,怎样用触发器实现?
- ********************数据类型
- 关于bcp中传参数,定义变量@MaxPid,把本地最大programid 取出来赋给它,再把远程programid>@MaxPid导到文本
declare @sql nvarchar(4000)
set @sql = 'select @sum = sum(a) from t1 where id = 1'
EXEC sp_executesql @sql,N'@sum int output',@sum output
set @b = @sum /*将汇总结果赋给@b变量*/
(
value varchar(100)
)
declare @a varchar(2000)
,@b varchar(100)
set @a='select gz from testA where gz=800'insert into #test
exec(@a)
select @b=value from #test
select @b
drop table #test
set @sql = 'select @sum = sum(a) from t1 where id = 1'
@sql 中一定要加上@sum = 吗
‘sum(a) from t1 where id = 1' 是从数据库中动态读出来的。。原句是这样
declare @Col varchar(250)
declare @ColCN nvarchar(500)
declare @colValue int
declare @colSql nvarchar(4000)
SET @TID=1
select @ColSql=ObTableColSql
from obTable
where obTableID=@TID and obtableCol='a1'
EXEC sp_executesql @colSql,N'@colValue int output',@colValue output
print @colValue
结果为空。
declare @ColCN nvarchar(500)
declare @colValue int
declare @colSql nvarchar(4000)
SET @TID=1
select @ColSql=ObTableColSql
from obTable
where obTableID=@TID and obtableCol='a1'
SET @colvalue = EXEC(@ColSql) /*这样调用*/
print @colValue
SET @colvalue = EXEC(@ColSql)
更正如下:
declare @Col varchar(250)
declare @ColCN nvarchar(500)
declare @colValue int
declare @colSql nvarchar(4000)
SET @TID=1
select @ColSql=ObTableColSql
from obTable
where obTableID=@TID and obtableCol='a1'
EXEC @colvalue = sp_executesql @ColSql /*修改此处,这样调用*/
print @colValue
请验证一下:
if object_id('tbTest') is not null
drop table tbTest
GO
----创建测试数据
create table tbTest(columnID int,columntype int)
insert tbTest
select 1 ,130 union all
select 2 ,130 union all
select 3 ,130
GO
declare @colSql nvarchar(4000)
declare @colValue int
----SQL字符串内容
set @colSql = 'select sum(columnID) from tbTest where columntype > 129'
----获得SQL返回值
EXEC @colValue = sp_executesql @colSql
----打印结果
print @colValue----清除测试环境
drop table tbTest/*结果
6
*/
EXEC @colValue = sp_executesql @colSql
只返回的是0或1
Return Code Values
0 (success) or 1 (failure)---
楼主是要复制给一个变量。。
insert tbTest
select 1 ,130 union all
select 2 ,130 union all
select 3 ,130declare @colSql nvarchar(4000)
declare @colValue intexec sp_executesql N'select @v=sum(columnID) from tbTest where columntype > 129', N'@v VARCHAR(100) OUTPUT',@colValue OUTPUT
select @colValuedrop table tbTest
多谢提醒,这个办法的确不行.
楼主有必要改写保存在表中的SQL字符串的内容,将
select sum(columnID) from outtableCol where columntype >129
改成
select @colValue = sum(columnID) from outtableCol where columntype >129
然后象楼上fcuandy或二楼写的那样,使用sp_executesql来获得返回值.如果不改SQL字符串的内容,可以参考Hopewell_Go的办法,将返回值插入到临时表中再从临时表中提取.