我在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转换为字符串
答案 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