[英]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.