【发布时间】:2014-10-25 10:18:38
【问题描述】:
我有这个存储过程:
CREATE PROCEDURE [dbo].[MYSTOREDPROCEDURENAME]
AS
BEGIN
BEGIN TRANSACTION;
BEGIN TRY
CREATE TABLE [dbo].[#Temp](
Col1 varchar(50) NOT NULL,
Col2 varchar(50) NOT NULL,
Col3 varchar(50) NOT NULL,
Col4 smallint NULL)
INSERT INTO [dbo].[#Temp]([Col1], [Col2], [Col3], [Col4])
SELECT [Col1],[Col2],[Col3],[Col4] FROM [dbo].[MyTable]
TRUNCATE TABLE [dbo].[MyTable]
INSERT INTO [dbo].[MyTable] ( Col1, Col2, Col3, Col4 )
SELECT Field1, Field2, Field3, ISNULL((SELECT Col4 FROM [dbo].[#Temp] WHERE [dbo].[#Temp].[Col1]=MyTable2.Field1 AND [dbo].[#Temp].[Col2]=MyTable2.Field2 AND [dbo].[#Temp].[Col3]=MyTable2.Field3),1) AS Espr1
FROM [dbo].[MyTable2]
DROP TABLE [dbo].[#Temp]
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;
END
如果我执行这个sp,就会显示这个错误信息:
消息 468,级别 16,状态 9,过程 MYSTOREDPROCEDURENAME,第 32 行 无法解决等于操作中“Latin1_General_CI_AS”和“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突。 消息 266,级别 16,状态 2,过程 MYSTOREDPROCEDURENAME,第 32 行 EXECUTE 之后的事务计数表明缺少 COMMIT 或 ROLLBACK TRANSACTION 语句。先前计数 = 0,当前计数 = 1。
现在,除了错误之外,我不明白为什么没有达到块“catch”并且没有完成事务回滚(在错误“MyTable”被锁定之后!)
我哪里错了?为什么“catch”块不起作用?
附:存储过程是在 Sql Server 2005 上执行的
【问题讨论】:
标签: sql-server tsql stored-procedures transactions try-catch