Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何获取默认错误消息和自定义错误消息_Sql Server_Tsql_Stored Procedures_Sql Server 2008 R2 - Fatal编程技术网

Sql server 如何获取默认错误消息和自定义错误消息

Sql server 如何获取默认错误消息和自定义错误消息,sql-server,tsql,stored-procedures,sql-server-2008-r2,Sql Server,Tsql,Stored Procedures,Sql Server 2008 R2,您好,我使用的是SQL SERVER 2008 R2数据中心版,我有一个存储过程,在这个存储过程中,我使用raiserror发出一条自定义错误消息。是否有一种方法也可以获取sql server的default错误消息。存储过程的代码如下所示 CREATE Procedure usp_SomeName @StableName nvarchar(50) = NULL, @StableID INT = NULL OUTPUT, @StableDescription

您好,我使用的是SQL SERVER 2008 R2数据中心版,我有一个存储过程,在这个存储过程中,我使用raiserror发出一条自定义错误消息。是否有一种方法也可以获取sql server的default错误消息。存储过程的代码如下所示

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

您可以使用try catch,当您引发错误时,批处理将转到catch,然后使用@error\u消息查看错误消息。

在SQL Server 2012中,您可以使用THROW()。在那之前,我认为你运气不好……谢谢你的回复。还有一个问题,因为你提到了sql2012,我的公司正在讨论是否升级到SQL 2012,因为“我的老板”听了太多关于SQL 2012问题的故事,你认为他是对的还是他只是想节省一些钱?:)对新版本总是有恐惧和偏执。SQL Server 2012引入了更严格的许可,这可能会提高某些客户的成本,但只要您安装SP1和CU6,就不应该存在任何技术问题。许多人误解了成本问题。它们从每个处理器变为每个核心,但它们将成本降低了4倍(如果你不幸使用AMD,还可以享受更多折扣)。因此,对于那些拥有6+核心处理器的尖端服务器的人来说,这只会变得更加昂贵。对于那些四核的价格与以前差不多。下一次,当你的老板被说服购买许可证时,软件保障也是一件值得研究的事情。他是否期望数据中心版本比其他版本更便宜?