2012-01-30 98 views
1

,我有以下范围内的一段代码我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,该错误信息是,它不能从日期时间转换为字符串

+3

指定大小'@ ErrorMessages' - 它怎么不起作用?显示什么错误,@PreviousDepositEndDate等是什么类型。 – 2012-01-30 15:27:49

+0

@AlexK。忘了说它的日期时间 – ediblecode 2012-01-30 15:29:15

回答

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

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) 

如果你wan't指定错误号,您必须首先使用sp_addmessage和定义错误信息,您可以在raiserror引用。您可能需要插入一些演员,具体取决于@PreviousDepositEndDate@TenancyAgreementStartDate是什么类型。

+0

+1也需要在日期变量 – 2012-01-30 15:32:12

+0

@AlexK上进行转换。 : 你是对的!谢谢! – Mithrandir 2012-01-30 15:34:34