私はstored procedure
を持っています。これは与えられたレコードがあればテーブルからレコードを削除します。@@ RowCount内部のTryブロックが正しい値を返していない--Sql Server
CREATE PROCEDURE [dbo].[USP_DTEST]
@CfgKey AS VARCHAR(100)
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
BEGIN TRAN
--Deletes ConfigSetting table if data exists
IF EXISTS
(
SELECT 1
FROM [dbo].[ConfigSetting]
WHERE CfgKey = @CfgKey
AND RowStatus = 'A'
)
BEGIN
DELETE
FROM [dbo].[ConfigSetting]
WHERE CfgKey = @CfgKey
AND RowStatus = 'A'
END
IF @@ERROR = 0
BEGIN
SELECT 'Number of Records Deleted : '+ CAST(@@rowcount AS varchar(10))
COMMIT TRAN;
END
END TRY
BEGIN CATCH
SELECT @@ERROR AS ERROR, ERROR_LINE() AS [Error Line], ERROR_MESSAGE() AS [Error Message]
ROLLBACK TRAN;
END CATCH
SET NOCOUNT OFF;
END
stored procedure
が正常に動作します。しかし、sp @@rowcount
を実行すると、常に0
が返されます。私がerror handling
ブロックの上に@@rowcount
を置くと、それは1を返します。それはなぜですか?このquery
に構文エラーがありますか?
ありがとうございました
'[dbo]。[ConfigSetting]'には(DELETEの)トリガーがありますか? – gofr1
構文エラーはありません。 '@@ ROWCOUNT'は最後のステートメントの影響を受ける行の数を示しています。そのようなifステートメントの場合は0です。これは、' select * from myTable ; 1 = 1ならば@@ rowcount'を選択します。 1 = 1は行に影響を与えないので、行数は0になります。 – ZLK
トリガーなし@ gofr1 – bmsqldev