MS SQL Server Management Studio'da işlemlerle çalışmanın en iyi yolu


127

Sözdizimsel ve anlamsal olarak doğru olan bir SQL deyimim olduğunu varsayalım, böylece yürütülür.

Management Studio'da (veya başka bir sorgu aracında) SQL deyimlerini nasıl test edebilirim ve bir şeyi bozduklarını fark edersem geri alma (ayrı bir sorguda mı?)

Yanıtlar:


227

Yapılması en kolay şey, kodunuzu bir işlemde sarmak ve ardından her T-SQL kodu grubunu satır satır yürütmektir.

Örneğin,

Begin Transaction

         -Do some T-SQL queries here.

Rollback transaction -- OR commit transaction

Hata işlemeyi dahil etmek istiyorsanız, bunu bir TRY ... CATCH BLOCK kullanarak yapabilirsiniz. Bir hata oluşursa, catch bloğu içindeki tranasction'ı geri alabilirsiniz.

Örneğin:

USE AdventureWorks;
GO
BEGIN TRANSACTION;

BEGIN TRY
    -- Generate a constraint violation error.
    DELETE FROM Production.Product
    WHERE ProductID = 980;
END TRY
BEGIN CATCH
    SELECT 
        ERROR_NUMBER() AS ErrorNumber
        ,ERROR_SEVERITY() AS ErrorSeverity
        ,ERROR_STATE() AS ErrorState
        ,ERROR_PROCEDURE() AS ErrorProcedure
        ,ERROR_LINE() AS ErrorLine
        ,ERROR_MESSAGE() AS ErrorMessage;

    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION;
END CATCH;

IF @@TRANCOUNT > 0
    COMMIT TRANSACTION;
GO

Daha fazla ayrıntı için aşağıdaki bağlantıya bakın.

http://msdn.microsoft.com/en-us/library/ms175976.aspx

Bunun yardımcı olacağını umuyoruz, ancak daha fazla ayrıntıya ihtiyacınız olursa lütfen bana bildirin.


3
Merhaba teşekkürler. Burada @@ TRANCOUNT hakkında ilk kez gördüm ve ROLLBACK işleminden sonra "IF @@ TRANCOUNT> 0 COMMIT TRANSACTION" e ne olduğunu söyleyebilir misiniz? ve @@ TRANCOUNT hangi değere sahiptir? Tekrar teşekkürler.
QMaster

2
ROLLBACK İŞLEMİ uygulandıktan sonra @@ TRANCOUNT, 0'a geri ayarlanır. Bu sayede COMMIT TRANSACTION çalıştırılmaz. Bkz msdn.microsoft.com/de-de/library/ms187967.aspx
Christoph Bruckmann

8

Test modundaysanız geri dönüşe bir test değişkeni ekleyebileceğiniz (ve yazdığınız şey karmaşıksa yapmalısınız) bir nokta eklemek istiyorum. O zaman her şeyi bir kerede yürütebilirsiniz. Genellikle, özellikle karmaşık bir komut dosyasıysa, çeşitli işlemlerin öncesi ve sonrası sonuçlarını görmek için kod eklerim.

Aşağıdaki örnek:

USE AdventureWorks;
GO
DECLARE @TEST INT = 1--1 is test mode, use zero when you are ready to execute
BEGIN TRANSACTION;

BEGIN TRY
     IF @TEST= 1
        BEGIN
            SELECT *FROM Production.Product
                WHERE ProductID = 980;
        END    
    -- Generate a constraint violation error.
    DELETE FROM Production.Product
    WHERE ProductID = 980;

     IF @TEST= 1
        BEGIN
            SELECT *FROM Production.Product
                WHERE ProductID = 980;
            IF @@TRANCOUNT > 0
                ROLLBACK TRANSACTION;
        END    
END TRY

BEGIN CATCH
    SELECT 
        ERROR_NUMBER() AS ErrorNumber
        ,ERROR_SEVERITY() AS ErrorSeverity
        ,ERROR_STATE() AS ErrorState
        ,ERROR_PROCEDURE() AS ErrorProcedure
        ,ERROR_LINE() AS ErrorLine
        ,ERROR_MESSAGE() AS ErrorMessage;

    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION;
END CATCH;

IF @@TRANCOUNT > 0 AND @TEST = 0
    COMMIT TRANSACTION;
GO
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.