Ejecutar escalar en T-SQL
-
30-09-2019 - |
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
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! =)