【问题标题】:How to get DEFAULT ERROR message along with Custom RAISERROR message如何获取默认错误消息以及自定义 RAISERROR 消息
【发布时间】: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


【解决方案1】:

您可以使用try catch,当您引发错误时,批处理会去catch,然后使用@@error_message 查看错误消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    相关资源
    最近更新 更多