3

在 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
4

3 回答 3

1

您的临时表解决方案可能是唯一的选择。

SQL 并不是为此而设计的

于 2010-11-09T19:41:22.847 回答
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

但是,这远非理想,而且您必须启用临时查询才能使其正常工作

于 2010-11-09T19:30:54.597 回答
0

根据您的要求,这是我能想到的唯一方法。=)

从 dbo.MyStoredProcedure 中选择 TOP 1 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

相关链接:存储过程:返回数据

我希望这有帮助!=)

于 2010-11-09T19:34:16.047 回答