2011-10-15 39 views
3

根据我的研究,在MSSQL中没有数组变量,不是吗? 我想获得选择查询的结果。查询返回了多个值。 (你可以看到下面的查询,它返回大于1倍的值,我不能给它分配。)如何从查询中获取值到变量

Declare @sp_name varchar(100) 
set @sp_name = (select name from sys.procedures) 

有没有办法得到的结果给一个变量?

回答

2

您可以使用table variable

declare @results table (Name nvarchar(100)) 
insert into @results select name from sys.procedures 
select * from @results 
+0

感谢@adrift,我想使用他们每个人的结果--- SELECT * FROM fn_my_permissions('dbo.MyProc','OBJECT') ORDER BY subentity_name,permission_name ---我必须用结果替换dbo.MyProc,怎样才能使用循环与表变量? – ToUpper

+0

我不确定你想如何使用它,但是你可以从该表中选择并执行动态sql,或者使用游标循环遍历行。请参阅示例[此处](http://msdn.microsoft.com/en-us/library/ms180169.aspx)。 –

+0

Wov,它似乎专业,我必须努力工作..谢谢 – ToUpper

2

使用此

set @sp_name = '' 
select @sp_name = @sp_name +name+',' from sys.procedures 
set @sp_name = left(@sp_name,len(@sp_name)-1)  -- Remove last comma 

现在@sp_name将是一个逗号分隔的列表。

你也可以做

select @sp_name into #tmpList FROM sys.procedures 
select * from #tmpList 

你是对的,没有阵列,但希望无论是逗号列表或临时表会做你想要什么..

+0

感谢@Sparky,你的回答是指导。 – ToUpper

+0

第一个查询部分返回这个:“sp_upgraddiagrams,sp_helpdiagrams,sp_helpdiagramdefinition,sp_creatediagram,sp_renamediagram,sp_ “你有什么想法,为什么它不完整? – ToUpper

+1

为sp_name增加您的大小的长度,可能为VARCHAR(最大) – Sparky