簡體   English   中英

為什么CREATE TABLE命令在用戶定義的事務中不起作用?

[英]Why is CREATE TABLE command not working in a user-defined transaction?

對於這個愚蠢的問題,我事先表示歉意,但是我無法弄清楚為什么CREATE TABLE在以下所示的代碼中沒有回滾。 我知道不能在用戶定義的事務中指定CREATE DATABASE,CREATE FULLTEXT CATALOG和CREATE FULLTEXT INDEX。 請注意,執行此代碼時,SSMS中的Tables文件夾被鎖定。

BEGIN TRANSACTION T1
CREATE TABLE temp
(
chisla char(1)
)

SELECT count(chisla) AS Count, chisla AS My_Numbers
FROM temp
--GROUP BY chisla
ORDER BY chisla

drop table temp
COMMIT TRANSACTION T1
GO

您沒有告訴它回滾。 JNK展示了如何在發生可捕獲錯誤的情況下嘗試執行Catch應該回滾事務處理。 但是,在這種情況下使用不正確的SQL,無論如何它都不會回滾,因為它是不可陷阱的錯誤。 您必須在SQl中具有正確的語法,事務才能正常工作,這是動態SQl可能非常危險的原因之一,因為它無法完全測試。

無論如何,在這種情況下動態創建表是一個壞習慣。 如果臨時需要某些內容,請使用臨時表或表變量,請勿創建永久表,如果操作失敗,該表將回滾創建表。

我想您想要一個TRY...CATCH塊。 msdn上有一個很好的解釋

舉個簡單的例子:

BEGIN TRY
   BEGIN TRANSACTION
   ...your code...
   COMMIT TRANSACTION
END TRY
BEGIN CATCH
   ...error reporting code here...
   ROLLBACK TRANSACTION
END CATCH;

暫無
暫無

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

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