我有一个带动态SQL的存储过程。是否可以在COMMIT
或ROLLBACK
的显式事务中包含一批动态SQL,具体取决于@@ERROR
的值?
遵循类似的存储过程。它是为了演示目的而简化的。
CREATE PROCEDURE [dbo].[sp_Example]
AS
BEGIN
BEGIN TRANSACTION
DECLARE @ID VARCHAR(10)
INSERT INTO [dbo].[Deparment] (Name,Location,PhoneNumber) VALUES ('DeparmentName','DeparmentLocation','0112232332')
SELECT @ID =SCOPE_IDENTITY()
IF @@ERROR <> 0
BEGIN
ROLLBACK
RAISERROR ('Error in Inserting Deparment.', 16, 1)
RETURN
END
SET @InsertQuery = '
DECLARE @Name varchar(100)
SELECT @Name = Name
FROM dbo.[Deparment]
WHERE DepartmentId= ''' + @ID +'''
INSERT INTO [dbo].[Employee](Name,Age,Salary,DepartmentName)VALUES(''EMPLOYEE NAME'',''25'',''200000'','''+@NAME'')''
EXEC(@InsertQuery)
IF @@ERROR <> 0
BEGIN
ROLLBACK
RAISERROR ('Error in Inserting Employee.', 16, 1)
RETURN
END
COMMIT
END
外部交易范围是否适用于动态查询?
答案 0 :(得分:0)
“外部”交易将适用于所执行的所有事务。 SQL Server中没有办法在正在运行的事务下不执行(这可能会让您想要记录错误而烦恼)。