【发布时间】:2013-10-11 18:25:01
【问题描述】:
您好,我正在使用 SQL SERVER 2008 R2 数据中心版,我有这个存储过程,我在其中使用 raiserror 引发自定义错误消息。有没有办法也得到 sql server 的默认错误消息。存储过程的代码如下。
CREATE Procedure usp_SomeName
@StableName nvarchar(50) = NULL,
@StableID INT = NULL OUTPUT,
@StableDescription ntext = NULL,
@Picture image = NULL,
@ReturnCode int = NULL OUTPUT,
@ReturnMessage nvarchar(100) = NULL OUTPUT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
IF @StableName IS NULL
RAISERROR('Validation Failed: Stable name cannot be null', 16,1)
IF EXISTS (SELECT StableName from dem.TableName
WHERE StableName = @StableName)
RAISERROR('Validation Failed: Stable Name already Exists',16,1)
BEGIN TRANSACTION
INSERT INTO TableName(StableName, [Description], Picture)
VALUES (@StableName, @StableDescription, @Picture)
COMMIT TRANSACTION
SELECT @ReturnCode = 0 , @ReturnMessage = 'Sucess! New Stable Details has added.'
SELECT @StableID = SCOPE_IDENTITY()
END TRY
BEGIN CATCH
IF (@@TRANCOUNT > 0)
ROLLBACK TRAN
SELECT @ReturnCode = ERROR_NUMBER(), @ReturnMessage = ERROR_MESSAGE()
SELECT @ReturnCode AS ReturnCode, @ReturnMessage AS ReturnMessage,
ERROR_LINE() AS ErrorLine,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState
END CATCH
SET NOCOUNT OFF;
END
GO
【问题讨论】:
-
在 SQL Server 2012 中,您将能够使用 THROW()。在那之前,我认为你运气不好......
-
感谢亚伦的回复。还有一个问题,既然你提到了sql2012,我公司正在讨论是否升级到SQL 2012,因为“我的老板”听过太多关于sql 2012问题太多的故事,你认为他是对的还是他是对的只是想节省一些便士? :)
-
对新版本总是充满恐惧和偏执。 SQL Server 2012 引入了更严格的许可,这可能会增加一些客户的成本,但只要您安装 SP1 和 CU6,确实不应该有任何技术问题。
-
很多人误解了成本问题。它们从每个处理器更改为每个内核,但它们将成本降低了 4 (如果您不幸使用 AMD,则可以享受更多折扣)。因此,对于拥有 6 个以上核心处理器的尖端服务器的人来说,它只会变得更加昂贵。对于那些拥有四核的人来说,价格与以前大致相同。软件保障也是一件值得研究的好事情,下次你的老板被说服购买许可证时。
-
他是否期望数据中心版比其他任何版本都便宜?
标签: sql-server tsql stored-procedures sql-server-2008-r2