Hata

2016-03-21 34 views
0

ben SQL Server Management Studio'da koştu aşağıdaki sorgu var: Ben aynı masada çalıştırmayı deneyin her sorgu Bu komuttan sonraHata

BEGIN TRANSACTION [Tran1] 
BEGIN TRY 
    UPDATE SomeTable 
    SET value = 0 
    WHERE username = 'test' 
     OR [PR_RequestDate] < DATEADD(day, -2, GETDATE()) 

    INSERT INTO SomeTable (username, value) 
    VALUES('test', 'test') 

    COMMIT TRANSACTION [Tran1] 
END TRY 
BEGIN CATCH 
    ROLLBACK TRANSACTION [Tran1] 
END CATCH 
GO 

sonsuza çalışır ve ben çalıştığınızda SQL Server Management Studio'yu kullanmak için, işlem yapılmayan işlemlerin olduğuna dair bir uyarı alıyorum.

Sorgumda tam olarak yanlış olan şey nedir ve nasıl düzeltmeliyim?

+1

'INSERT INTOSomeTable (kullanıcı adı, değer) DEĞERLER ('Test', 'test')' o yazım hatası gerçek kodda var ,, toplam mesaj ve TRANCOUNT olsun? Benim tahminim, CATCH (belki yukarıda yazılan yazım hatası) tarafından yakalanmayan kötü bir şeydir, bu yüzden hiçbir zaman işlemeye veya geri dönüşe ulaşamayacaksınız. CATCH her şeyi yakalamıyor (kafa karıştırıcı olabilir). CATCH'nizden sonra bir @@ TRANCOUNT –

+0

eklemeyi deneyin. Seçtiğiniz sorgunun bile sonsuza kadar sürüyor mu? – Venkatesh

+1

Kendinize "yanlış olan" hakkında bilgi saklıyorsunuz. Herhangi bir nedenden dolayı yükseltilmesini istemiyorsanız, yakalama blokunuzda en azından yazdırma hatası mesajı. –

cevap

0

Typos, İvan tavsiyesi olarak bize tüm bilgiyi göstermediğinize göre hemen yakalanacaktır. Güncelleme veya ekleme hatalarından ve geri almayı deneyen tüm sorgudan kaynaklanan işlem dışı hatalarla karşılaşıyorsunuz.

set xact_abort on--to rollback entire batch,rollback in catch is redundant 
begin try 
begin tran 
commit 
end try 
begin catch 
select @@trancount--gives me number of open transactions 
select error_message() 
rollback tran 
end catch 
+0

Merhaba, 'update' ve' insert' ifadelerini çalıştırmak kendi başına hata oluşturmaz. Önerdiğin şeyi uyguladım ve iyi gidiyor gibi görünüyor. Ama temelde değişen 'GO' ifadesidir. Neden bu sorunu yaratır? – dearn44

+0

Go, bir toplu ayırıcıdır, bu soruda gitme bağlamından emin değilim – TheGameiswar