首页 > 解决方案 > 是否可以选择一个结果集从批处理执行中返回?

问题描述

我必须通过专有应用程序从 MSSQL 2014 服务器检索一些数据,然后使用 odbc 数据源。我唯一可以修改的是应用程序使用的查询。我无法修改应用程序或应用程序处理结果的方式。

如果我直接执行以下查询,例如在 Heidi 中,则以下查询正在执行我想要的操作。

USE MY_DB;

BEGIN TRANSACTION

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

DECLARE @myvar1 INT = 2;
DECLARE @myvar2 INT = 2;

PRINT @myvar1;

SELECT TOP 20 [vwPGIA].[OrNum],[vwPGIA].[DBM],[vwPGIA].[MBM],[vwPGIA].[MN],[NOMID],[Priority],SUBSTRING([Comment],0,254) AS Comment,[TLSAP],[Box],[SequenceNumber] 
INTO #tmp_tbl
FROM [MY_DB].[dbo].[vwPGIA] 
  INNER JOIN [MY_DB].[dbo].[tblDLA] ON [dbo].[tblDLA].[OrNum]=[dbo].[vwPGIA].[OrNum]
  INNER JOIN [dbo].[tblMDM] ON [vwPGIA].[MBM]=[tblMDM].[MBM]
WHERE ([TLSAP] = @myvar1) 
  AND [vwPGIA].[MBM] NOT IN (SELECT [MBM] FROM [MY_DB].[dbo].[vwDPS])
  AND [vwPGIA].[OrNum] NOT IN (SELECT [OrNum] FROM [MY_DB].[dbo].[vwDPS] WHERE  [MY_DB].[dbo].[vwDPS].[TLR] <> @myvar1)
ORDER BY [SequenceNumber];

SELECT TOP 1 [OrNum],[DBM],[MBM],[MN],[NOMID],[Priority],[Comment],[TLSAP],[Box],[WTT],[SequenceNumber]
FROM #tmp_tbl 
  INNER JOIN [dbo].[tblTBN] ON [Box]=[BoxN] 
WHERE ([WTT]=@myvar2)
ORDER BY [SequenceNumber];


INSERT INTO [dbo].[tblDPS]
    (OrNum,DBM,MBM,State,StateStartTime,Info,TLR)
        SELECT TOP 1 [OrNum],[DBM],[MBM],'1',GETDATE(),'info',@myvar1
        FROM #tmp_tbl 
        INNER JOIN [dbo].[tblTBN] ON [Box]=[BoxN] 
        WHERE ([WTT]=@myvar2)
        ORDER BY [SequenceNumber]
    ;

DROP TABLE #tmp_tbl;

COMMIT TRANSACTION

通过 ODBC 接口运行它会导致空结果。问题似乎是,我正在执行一个导致多个结果集的批处理请求。应用程序可能只处理第一个结果集,或者可能无法处理多个结果集。

最后的问题是:有没有办法或解决方法将结果集减少到仅由SELECT TOP 1 ...部件返回的结果集?

标签: sqlsql-server

解决方案


推荐阅读