在T-SQL中执行等效执行标量的最佳方法是什么?换句话说,使用SQL,当我调用存储过程时,如何获取第一个结果集的第一行的第一列?
修改 只是为了澄清,这是仅使用SQL,没有客户端语言。结果集可能类似于:
Id Description
--------------
1 foo
2 bar
我只想在变量中使用“1”。
我知道如何做到这一点的唯一方法是使用临时表(未经测试,但你明白了):
INSERT #TempTable EXEC MyStoredProcedure
DECLARE @id INT;
SELECT TOP(1) @id = Id FROM #TempTable
答案 0 :(得分:1)
您的临时表解决方案可能是唯一的选择。
SQL并非真正为此设计
答案 1 :(得分:0)
如果您正在谈论.net客户端,那么您可以使用SQLCommand.ExecuteScalar。
如果没有,请添加一个示例,看看它的外观如何。
编辑: 你可以这样做,因为你提供了额外的信息:
-- add 'loopback' linkedserver
if exists (select * from master..sysservers where srvname = 'loopback')
exec sp_dropserver 'loopback'
go
exec sp_addlinkedserver @server = N'loopback',
@srvproduct = N'',
@provider = N'SQLOLEDB',
@datasrc = @@servername
go
select top 1 * @id = id
from openquery(loopback, 'exec MyStoredProcedure')
go
然而,这远非理想,而且您必须启用即席查询才能使其正常工作
答案 2 :(得分:0)
这是我能想到的唯一方式,从你所要求的。 =)
从dbo.MyStoredProcedure中选择TOP1 nameOfFirstColumnReturnedBySP作为Column1
编辑#1
-- Assuming this temporary table represents the data structure returned by the SP.
CREATE TABLE @Data (
Column1 int
, Column2 nvarchar(10)
)
insert into @Data
exec dbo.MyStoredProcudure
select TOP 1 Column1
from @Data
相关链接:Stored Procedures: Returning Data
我希望这有帮助! =)