代码之家  ›  专栏  ›  技术社区  ›  Nelson Rothermel

在T-SQL中执行标量

  •  3
  • Nelson Rothermel  · 技术社区  · 15 年前

    在T-SQL中执行标量的最佳方法是什么?换句话说,使用SQL,调用存储过程时如何获取第一个结果集第一行的第一列?

    澄清一下,这是 只有 使用SQL,没有客户端语言。结果集可能类似于:

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

    我知道的唯一方法是使用一个临时表(未经测试,但你知道这个想法):

    INSERT #TempTable EXEC MyStoredProcedure
    
    DECLARE @id INT;
    
    SELECT TOP(1) @id = Id FROM #TempTable
    
    3 回复  |  直到 15 年前
        1
  •  0
  •   Mladen Prajdic    15 年前

    如果您所说的是.net客户端,那么可以使用SQLCommand.executescaler。

    如果不是,请添加一个例子,说明这将如何与您的情况完全相同。

    编辑:

    -- 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
  •  1
  •   gbn    15 年前

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

    SQL并不是为这个而设计的

        3
  •  0
  •   Will Marcouiller    15 年前

    从你的要求来看,这是我唯一能想到的办法。=)

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

    我希望这有帮助!=)