Sql-Server
無法對 while 循環中的語句執行選項提示
SQL Server 2014 兼容性級別 110 使用舊的基數估計器。我正在嘗試強制執行新的 CE 聲明。我收到錯誤“關鍵字‘選項’附近的語法不正確。” 我需要批量刪除。
while ( Select top (1) 1 from [AdventureWorks].dbo.DatabaseLog option (querytraceon 2312) --error ) > 0 begin delete top (10000 ) from [AdventureWorks].dbo.DatabaseLog end
– 它自己執行正常:
Select top (1) 1 from [AdventureWorks].[Person].[Person] option (querytraceon 2312)
option 子句只能用於獨立
SELECT
語句。不是
SELECT
用作表達式的地方。以下範例也不允許您指定查詢提示。
DECLARE @I INT = (SELECT 1 OPTION (RECOMPILE)) IF (1 = (SELECT 1 OPTION (RECOMPILE)) PRINT '1';
所以你要麼需要
- 重組您的程式碼,以便您嘗試應用查詢提示的語句不會直接嵌入內聯
WHILE
(需要重複該語句或將其包裝在非內聯函式中)- 在會話級別設置跟踪標誌
- 使用計劃指南(可能 - 我沒有測試過)
對於您問題中的具體範例,您根本不需要
SELECT
。DECLARE @Dummy VARCHAR(100) ='setting initial rowcount' WHILE @@rowcount > 0 BEGIN DELETE TOP (10000 ) FROM [AdventureWorks].dbo.DatabaseLog; END
或(因為這最終會刪除所有行)。
TRUNCATE TABLE [AdventureWorks].dbo.DatabaseLog;