Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

T-SQL не можа да се върне назад

Мисля, че не можете да направите нищо относно обработката на Sql Server с DDL обработка на тежестта на грешката, някои от тях се обработват автоматично (принудително връщане назад на транзакция например) от самия Sql Server.

Това, което можете просто да направите, е да накарате кода на скрипта да се справи с него и да предоставите на потребителите на скрипт описателна грешка.

Пример:

--  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. Как да имам ограничение за проверка, което препраща към друга таблица?

  2. SQL Server:Филтрирайте изхода на sp_who2

  3. sql сървър 2008 Неуспешно влизане за потребител „NT AUTHORITY\NETWORK SERVICE“

  4. Защо SQL Server използва индексно сканиране вместо търсене на индекс, когато клаузата WHERE съдържа параметризирани стойности

  5. Как да коригирате „Процедурата очаква параметър „@statement“ от тип „ntext/nchar/nvarchar“.“ Грешка в SQL Server