2010-02-01 194 views
0

我无法使用存储过程存储日期数据类型变量。我的代码是:SQL Server 2008存储过程

ALTER PROCEDURE [dbo].[Access1Register] 
-- Add the parameters for the stored procedure here 
@MobileNumber int, 
@CitizenName varchar(50), 
@Dob char(8), 
@VerificationCode int 
AS 
BEGIN 
-- SET NOCOUNT ON added to prevent extra result sets from 
-- interfering with SELECT statements. 
SET NOCOUNT ON; 

    -- Insert statements for procedure here 
    select CAST(@dob As DATE) 
Insert Into Access1 (MobileNo,CitizenName,Dob,VerificationCode) 
values(@MobileNumber,@CitizenName,@Dob,@VerificationCode) 
go 

如果我执行此过程它正在执行,但在日期类型变量中发生错误。它将错误提升为invalid item '-'

+1

什么** EXACTLY **是错误信息?你在'@ Dob'参数中传递了什么样的值? –

+1

你可能在低兼容性模式下运行数据库吗? – keithwarren7

回答

2

这取决于您传递的日期格式。

如果是'mm-dd-yy',则可以使用CONVERT(DATE, @Dob, 110),如果它是'dd-mm-yy',那么CONVERT(DATE, @Dob, 105)

3

这取决于你如何通过@Dob值。

最好的办法是使用ISO8601格式 - 'YYYYMMDD' - 因为无论您的SQL Server计算机上的语言和区域设置如何,它都会正确转换为DATE。

0

以何种格式传递@Dob值?你究竟得到了什么错误?

如果您将通过@Dob值的格式为mm-dd-yy,它应该可以正常工作,并且不会出现任何错误。