Question

What is the best way to do the equivalent of execute scalar in T-SQL? In other words, using SQL, how can I get the first column of the first row of the first result set when I call a stored procedure?

Edit: Just to clarify, this is only using SQL, no client-side language. The result set could be something like:

Id Description
--------------
1  foo
2  bar

I only want "1" in a variable.

The only way I know how to do this is with a temp table (untested, but you get the idea):

INSERT #TempTable EXEC MyStoredProcedure

DECLARE @id INT;

SELECT TOP(1) @id = Id FROM #TempTable
Was it helpful?

Solution

if you're talking about .net client, then you can use SQLCommand.ExecuteScalar.

if not please add an example of how this would look exactly for your case.

EDIT: you can do this since you provided extra info:

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

However this is far from ideal, plus you have to enable ad hoc queries for this to work

OTHER TIPS

Your temp table solution is probably the only option.

SQL isn't really designed for this

This is the only way I can think of, from what you're asking. =)

select TOP 1 nameOfFirstColumnReturnedBySP as Column1 from dbo.MyStoredProcedure

EDIT #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

Related link: Stored Procedures: Returning Data

I hope this helps! =)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top