如何将查询结果赋值给变量

3

根据我的研究,在MSSQL中没有数组变量,是吗? 我想得到一个select查询的结果。但是这个查询返回了多个值。(你可以看到下面的查询,它返回了多个值,我不能赋值给它。)

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

有没有办法将结果存储到一个变量中?
2个回答

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

你说得对,虽然没有数组,但希望逗号列表或临时表能够满足您的需求。


第一个查询部分返回了这些内容:"sp_upgraddiagrams,sp_helpdiagrams,sp_helpdiagramdefinition,sp_creatediagram,sp_renamediagram,sp_alt"。你有任何想法为什么它是不完整的吗? - ToUpper
1
将sp_name的大小增加,可能改为VARCHAR(max)。 - Sparky
你说得对!谢谢@Sparky...我想给你的答案投票,但我需要3个声望 :) 当我有3个声望时,我会投票的 :) - ToUpper

2
您可以使用一个表变量:table variable
declare @results table (Name nvarchar(100))
insert into @results select name from sys.procedures
select * from @results

感谢 @adrift,我想要在下列语句中使用它们的结果: SELECT * FROM fn_my_permissions('dbo.MyProc','OBJECT') ORDER BY subentity_name, permission_name 我需要用结果替代 dbo.MyProc,我该如何使用循环和表变量? - ToUpper
我不确定您想如何使用它,但您可以从该表中选择和执行动态SQL,或使用游标循环遍历行。请参见此处的示例:http://msdn.microsoft.com/en-us/library/ms180169.aspx。 - Jeff Ogata

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接