Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

T-SQL không thể khôi phục

Tôi nghĩ rằng bạn không thể làm gì về việc xử lý Sql Server bằng cách xử lý mức độ nghiêm trọng của lỗi DDL, một số trong số đó được xử lý tự động (ví dụ:buộc phải quay lại giao dịch) bởi chính Sql Server.

Những gì bạn chỉ có thể làm là làm cho mã tập lệnh của bạn đối phó với nó và cung cấp cho người dùng tập lệnh lỗi mô tả.

Ví dụ:

--  drop table thetransformersmorethanmeetstheeye
--  select * from thetransformersmorethanmeetstheeye



--  first batch begins here         

    begin tran

    create table thetransformersmorethanmeetstheeye(i int); -- non-erring if not yet existing

    -- even there's an error here, @@ERROR will be 0 on next batch
    ALTER TABLE [dbo].[Table1]  WITH CHECK ADD  CONSTRAINT [FK_constraint] FOREIGN KEY([field1], [field2])
    REFERENCES [dbo].[Table2] ([field3], [field4]);             

go  -- first batch ends here



--  second batch begins here

    if @@TRANCOUNT > 0 begin        
        PRINT 'I have a control here if things needed be committed or rolled back';

        -- @@ERROR is always zero here, even there's an error before the GO batch. 
        -- @@ERROR cannot span two batches, it's always gets reset to zero on next batch
        PRINT @@ERROR; 


        -- But you can choose whether to COMMIT or ROLLBACK non-erring things here
        -- COMMIT TRAN;
        -- ROLLBACK TRAN;

    end
    else if @@TRANCOUNT = 0 begin
        PRINT 'Sql Server automatically rollback the transaction. Nothing can do about it';
    end
    else begin
        PRINT 'Anomaly occured, @@TRANCOUNT cannot be -1, report this to Microsoft!';
    end

--  second batch implicitly ends here   


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL động (chuyển tên bảng làm tham số)

  2. Bỏ qua / bỏ qua các hàng trùng lặp khi chèn

  3. PHP sqlsrv_connect tới SQL Server:Đã xảy ra lỗi liên quan đến mạng hoặc trường hợp cụ thể khi thiết lập kết nối với SQL Server

  4. Mã di chuyển đầu tiên và quy trình lưu trữ

  5. Làm cách nào để lấy số tháng (không phải tên tháng) từ một ngày trong SQL Server?