繁体   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