Pregunta

¿Cuál es la mejor manera de hacer el equivalente a ejecutar escalar en T-SQL? En otras palabras, utilizando SQL, ¿cómo puedo obtener la primera columna de la primera fila del primer conjunto de resultados cuando llamo a un procedimiento almacenado?

Editar Solo para aclarar, esto es solamente utilizando SQL, hay un lenguaje del lado del cliente. El conjunto de resultados podría ser algo como:

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

Sólo quiero "1" en una variable.

La única manera que sé cómo hacer esto es con una tabla temporal (no probado, pero se entiende la idea):

INSERT #TempTable EXEC MyStoredProcedure

DECLARE @id INT;

SELECT TOP(1) @id = Id FROM #TempTable
¿Fue útil?

Solución

Si usted está hablando de cliente .NET, entonces se puede utilizar SQLCommand.ExecuteScalar.

si no por favor añadir un ejemplo de cómo se vería exactamente para su caso.

EDIT: usted puede hacer esto ya que ya ha proporcionado información adicional:

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

Sin embargo, esto está lejos de ser ideal, además de que tenga que habilitar consultas ad hoc para que esto funcione

Otros consejos

Su solución de tabla temporal es probablemente la única opción.

SQL no está realmente diseñado para este

Esta es la única manera que se me ocurre, de lo que estás pidiendo. =)

SELECT TOP 1 nameOfFirstColumnReturnedBySP como Columna1 de dbo.MyStoredProcedure

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

Enlace relacionado: procedimientos almacenados: Devolver datos

Espero que esto ayude! =)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top