程序数据输入临时表

时间:2019-07-03 06:39:05

标签: sql-server tsql

我有一个过程可以正确返回结果,但是我无法将过程结果存储在单个表或临时表中。

我的过程返回这样的值

ItemName
BATH RUG-VDW.WO COTTON CLASSIC FRAME
-------------------------------------------
ItemName    ItemCode    StyleNo UPC EAN UnitFactor
BATH RUG-VDW.WO COTTON CLASSIC FRAME    4       884631844635    0884631844635   4.580
BATHRUG-VDW.WO COTTON CLASSIC FRAME 5       884631844659    0884631844659   4.580
BATH RUG-VDW.W COTTON CLASSIC FRAME 6       884631844666    0884631844666   4.580
ItemName
BATH RUG-VDW.WOVEN COTTON CLASSIC FRAME 12-840
-------------------------------------------
ItemName    ItemCode    StyleNo UPC EAN UnitFactor
BATH RUG-VDW.WOVEN COTTON CLASSIC FRAME 12-840  30  12-840  884631881906    0884631881906   4.580
BATH RUG-VDW.WOVEN COTTON CLASSIC FRAME 12-840  31  12-840  884631881913    0884631881913   4.580
----------------------------------------------------------------------------

代码:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[sp_GetDetail]
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @tab TABLE (no INT, name VARCHAR(30))

    DECLARE @MyCursor CURSOR;
    DECLARE @MyField VARCHAR(MAX);
    DECLARE @Qry VARCHAR(MAX);

    SET NOCOUNT ON;

    SET @MyCursor = CURSOR FOR
        SELECT DISTINCT ItemName FROM dbo.NewTest             

    SET @Qry=''

    OPEN @MyCursor 

    FETCH NEXT FROM @MyCursor INTO @MyField

    WHILE @@FETCH_STATUS = 0
    BEGIN
        /* YOUR ALGORITHM GOES HERE */

        SET @Qry = @Qry + '; SELECT '''+@MyField+''' AS ItemName'
        SET @Qry = @Qry + '; SELECT ItemName, ItemCode, StyleNo, UPC, EAN, UnitFactor FROM NewTest WHERE ItemName = '''+@MyField+''''

        FETCH NEXT FROM @MyCursor INTO @MyField 
    END;    

    EXEC (@Qry);

    CLOSE @MyCursor ;
    DEALLOCATE @MyCursor;
END;

3 个答案:

答案 0 :(得分:0)

如果您希望动态sql将值保存到临时表中,请先创建临时表(在光标之前),

IF OBJECT_ID('tempdb..#MyTempTable') IS NOT NULL DROP TABLE #MyTempTable



 create table #MyTempTable (ItemName varchar(100), ItemCode varchar(100), StyleNo varchar(100), UPC varchar(100), EAN varchar(100), 
  UnitFactor varchar(100)) -- change these definitions to match your actual data

然后更改构建sql的代码:

Set @Qry=@Qry+'; select '''+@MyField+''' as ItemName'
  Set @Qry=@Qry+'; insert into #MyTempTable select ItemName, ItemCode, StyleNo, UPC, EAN, 
  UnitFactor  from NewTest  where ItemName ='''+@MyField+''''

临时表#MyTempTable将在光标之外可用:

select * from #MyTempTable

drop table #MyTempTable

答案 1 :(得分:0)

应尽可能避免使用游标。这将返回一个结果集。希望这可以满足您的需求。

Button mButton = findViewById(R.id.activity_home_cta);

答案 2 :(得分:0)

您返回2个表,它们具有不同的结构。您不能将其存储在临时表中。

为什么您仍然只用名字的第一个SELECT做?看来完全是多余的。