在T-SQL中执行标量

时间:2010-11-09 19:21:27

标签: sql-server tsql executescalar

在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

3 个答案:

答案 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

我希望这有帮助! =)