无法在SQL Server中创建错误消息

时间:2012-01-30 15:25:05

标签: sql sql-server-2008 raiserror

我在stored procedure中有以下代码,我知道它不起作用,不应该工作,但我想说明我的意图:

 declare @ErrorMessages varchar;
 set @ErrorMessages = 'An existing deposit on this property ends after the intended start date for the new deposit. ' +
    'Existing End Date: ' + @PreviousDepositEndDate + '. Intended Start Date: ' + @TenancyAgreementStartDate
  raiserror 50002 @ErrorMessages

谁能告诉我应该做什么?或者创建这种类型的字符串的任何链接。

编辑:忘了说@Dates都是datetime,错误信息是它无法从datetime转换为字符串

2 个答案:

答案 0 :(得分:3)

试试这个:

 declare @ErrorMessages varchar(255);

仅使用@ErrorMessages varchar;会为您提供varchar(1)

set @ErrorMessages = 
      'An existing deposit on this property ends after the intended start date for the new deposit. ' + 
      'Existing End Date: ' + 
      @PreviousDepositEndDate + '. Intended Start Date: ' + @TenancyAgreementStartDate

  raiserror(@ErrorMessages, 16, 1)

如果您不想指定错误编号,则必须先使用sp_addmessage并定义错误消息,您可以在raiserror中引用该错误消息。您可能需要插入一些演员表,具体取决于@PreviousDepositEndDate@TenancyAgreementStartDate的类型。

答案 1 :(得分:0)

这是一个略有不同的版本,有些人喜欢它因为它模仿C printf风格:

-- Test data
declare @PreviousDepositEndDate varchar(30) = cast(getdate() - 1 as varchar(30))
    , @TenancyAgreementStartDate varchar(30) = cast(getdate() as varchar(30))
-- Throw
raiserror (N'An existing deposit on this property ends after the intended start date for the new deposit. Existing End Date: %s. Intended Start Date: %s',
           16, -- Severity,
           1, -- State,
           @PreviousDepositEndDate, -- First argument.
           @TenancyAgreementStartDate) -- Second argument.

可以在此MSDN链接中找到更多信息:http://msdn.microsoft.com/en-us/library/ms178592.aspx