nasıl kullanılır Saklı yordam yazıyor ve bir şey başarısız olduğunda 0 kayıt dönmek istiyorum. 0 satırları nasıl döndüreceğimi anlayamıyorum. Ben SELECT NULL
kullandım ama bu satır 1 col 1 NULL
ile 1 satır döndürür. Ayrıca benim hata kodu yolunda herhangi bir SELECT
deyimleri belirterek denedim ama SP çağrısı sonra @@ROWCOUNT
değerini test ederken, geri döndü 1 Bunun nedeni, @@ROWCOUNT
'un SP'de daha önce (EXISTS()
) SELECT
ifadesinden hiçbir zaman sıfırlanamaması olabilir. Herhangi bir tavsiye takdir edilecektir.T-SQL: Saklı yordamından 0 satır nasıl döndürülür ve XACT_ABORT ve TRY/CATCH
Ayrıca, AÇIK olarak ayarlanmış XACT_ABORT
var, ancak saklı yordamından "dönüş değeri" doğru hata döndürdüğünden emin olmak için bir TRY/CATCH
bloğu kullandım. Bu iyi mi? Bir hata varsa, XACT_ABORT
TRY/CATCH
'u geçersiz kılar mı yoksa hata kod yolum hala doğru döndürülen değerlerin döndürülmesine neden olur mu? 0 satırları döndürmek için
-- Setup
SET NOCOUNT ON; -- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.
SET XACT_ABORT ON; -- SET XACT_ABORT ON rollback transactions on errors
DECLARE @return int; SET @return = 1; -- Default to general error
-- Start transaction
BEGIN TRANSACTION
BEGIN TRY
IF NOT EXISTS(SELECT NULL FROM [MyTable] WHERE [Check] = 1)
BEGIN
-- Insert new record
INSERT INTO [MyTable] (Check, Date) VALUES (1, GETDATE());
SELECT SCOPE_IDENTITY() AS [MyValue]; -- Return 1 row
SET @return = 0; -- Success
END
ELSE
BEGIN
-- Fail
SELECT NULL AS [MyValue]; -- Want to return 0 rows not 1 row with NULL
SET @return = 2; -- Fail error
END
END TRY
BEGIN CATCH
-- Error
ROLLBACK TRANSACTION;
SELECT NULL AS [MyValue]; -- Want to return 0 rows not 1 row with NULL
SET @return = 1; -- General error
END CATCH
-- End transaction and return
COMMIT TRANSACTION
RETURN @return;
teşekkürler! Bundan 0 sonuç çıkıyorum :) Ama EXEC MySP'den sonra neden @@ ROWCOUNT = 1? –
'EXEC @ret = MySP; SET @rows = @@ ROWCOUNT; SELECT 'Satırlar' = @ satırlar 1, sonra satır sayısı olarak 1 döndürür !? –
Ah, @@ ROWCOUNT'un sadece satırları etkileyen ifadeler (yani, INSERT veya UPDATE) için değiştirilmesinde haklıyım mı? –