簡體   English   中英

如何在存儲過程中使用cicle白色的cicle臨時表

[英]How can cicle Temporary Table with cicle white in stored procedure

我有一個在SQL Server中創建此臨時表的存儲過程

CREATE TABLE #TeporaryTableAcqua
(
    Data DateTime, 
    Nome NVarchar(100), 
    Valore Decimal(10,2)
)

在存儲過程中,我用任何記錄填充該臨時表。

--RECUPERO L'ACQUA BEVUTA OGGI
INSERT INTO #TeporaryTableAcqua
   SELECT 
       'ACQUA BEVUTA', 
       CONVERT(varchar(12), data, 105),
       SUM(QUANTITA) * 100 
   FROM 
       OmniacareDataProduction.dbo.MV_Acqua A
   WHERE 
       CONVERT(varchar(12), data,105) = CONVERT(varchar(12), GETDATE(), 105)
   GROUP BY 
       CONVERT(varchar(12), data, 105)

現在,我想創建一個cicle來一次選擇一行,因此我已經構建了以下代碼,但出現錯誤:

DECLARE @NROW INT

SELECT @NROW = COUNT(*) 
FROM #TeporaryTableAcqua 

DECLARE @Nome As NVARCHAR(100)

WHILE (@NROW>0)
BEGIN
    SELECT @Nome = Nome 
    FROM #TeporaryTableAcqua 
    LIMIT 1

    EXEC [P_TF_UTILITY_Set_FileBodies]
         @FileTempID = @FileTempID, 
         @FieldID = 8, @Value = @Nome, @RowID = 2, @OrdinalID = 1

    DELETE FROM #TeporaryTableAcqua LIMIT 1

    SELECT @NROW = COUNT(*) 
    FROM #TeporaryTableAcqua 
END

錯誤在LIMIT 1

我該如何解決?

為了限制該行,sql server中有一個TOP子句。 sql server中沒有任何Limit類型的東西。

因此,這是您更新的腳本。

DECLARE @NROW INT
SELECT @NROW=COUNT(*) FROM #TeporaryTableAcqua 

DECLARE @Nome As NVARCHAR(100)

WHILE (@NROW>0)
BEGIN
        Select TOP 1 @Nome=Nome From #TeporaryTableAcqua Order By Nome 

        EXEC [P_TF_UTILITY_Set_FileBodies] @FileTempID=@FileTempID, @FieldID=8, @Value=@Nome, @RowID = 2, @OrdinalID = 1         

        --DELETE TOP (1) FROM #TeporaryTableAcqua
        DELETE FROM #TeporaryTableAcqua
          WHERE Nome = @Nome

        SELECT @NROW=COUNT(*) FROM #TeporaryTableAcqua 
END

重要的是要記住,執行查詢時,其結果將以未定義的順序返回,除非由order by子句特別指定。

考慮在數據的每一行中構成唯一標識符的因素也很重要。

如果Nome是唯一的,那么下面的代碼將為您工作。

如果沒有,那么您將必須在order by子句和delete語句的where子句中使用多個字段。

DECLARE @Nome As NVARCHAR(100)

WHILE exists (select * from #TeporaryTableAcqua)

BEGIN

    Set @Nome = (Select TOP 1 Nome From #TeporaryTableAcqua Order by Nome asc)

    EXEC [P_TF_UTILITY_Set_FileBodies] @FileTempID=@FileTempID, @FieldID=8, @Value=@Nome, @RowID = 2, @OrdinalID = 1      

    DELETE FROM #TeporaryTableAcqua where Nome = @Nome

END

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM