2014-10-21 2 views
1

안녕하세요. 라이브러리 flexi auth을 설치했으며 대신 SQL Server가 있습니다. 내 문제에 영향을 미친다.) 나는 새 사용자를 삽입 할 때flex_auth 라이브러리를 사용하여 varchar 데이터 형식을 datetime 데이터 형식으로 변환하면 범위가 벗어납니다.

생성 된 쿼리는 다음과 같습니다

INSERT INTO user_accounts (user_accounts.uacc_group_fk, 
    user_accounts.uacc_email, 
    user_accounts.uacc_username, 
    user_accounts.uacc_password, 
    user_accounts.uacc_ip_address, 
    user_accounts.uacc_date_last_login, 
    user_accounts.uacc_date_added, 
    user_accounts.uacc_activation_token, 
    user_accounts.uacc_active, 
    user_accounts.uacc_suspend, 
    user_accounts.uacc_salt) 
VALUES (
1 
, '[email protected]' 
, 'custom_username' 
, '$2a$08$KAFxZfqIDEOkucWAXePpYeQ6BiffjAxvTVv1HuXI3jgvBUo9OEHce' 
, '127.0.0.1' 
, '2014-10-21 12:01:18' 
, '2014-10-21 12:01:18' 
, 'faa46e2c45c383611dcb641f69e58144cc01962a' 
, 0 
, 0 
, 'R4GC9hXyWW') 

그리고 반환 된 오류는 다음과 같습니다 날짜 형식을 가지고 있기 때문에

[Microsoft][SQL Server Native Client 11.0][SQL Server]The conversion of a varchar data type to a datetime data type resulted in an out-of-range value. 

내가 그 이상한 생각 : 'YYYY- MM-DD HH는 : MM : SS '

내 테이블의 설명입니다

[uacc_id] [int] IDENTITY(1,1) NOT NULL, 
[uacc_group_fk] [smallint] NOT NULL, 
[uacc_email] [varchar](100) NOT NULL, 
[uacc_username] [varchar](15) NOT NULL, 
[uacc_password] [varchar](60) NOT NULL, 
[uacc_ip_address] [varchar](40) NOT NULL, 
[uacc_salt] [varchar](40) NOT NULL, 
[uacc_activation_token] [varchar](40) NOT NULL, 
[uacc_forgotten_password_token] [varchar](40) NOT NULL, 
[uacc_forgotten_password_expire] [datetime] NOT NULL, 
[uacc_update_email_token] [varchar](40) NOT NULL, 
[uacc_update_email] [varchar](100) NOT NULL, 
[uacc_active] [tinyint] NOT NULL, 
[uacc_suspend] [tinyint] NOT NULL, 
[uacc_fail_login_attempts] [smallint] NOT NULL, 
[uacc_fail_login_ip_address] [varchar](40) NOT NULL, 
[uacc_date_fail_login_ban] [datetime] NOT NULL, 
[uacc_date_last_login] [datetime] NOT NULL, 
[uacc_date_added] [datetime] NOT NULL, 
+0

테이블에있는 컬럼에 널 (null)을 허용하지 않으며 당신이 삽입의 모든 필드를 지정하지 않는 한 당신이 어떤 디폴트 값을 지정합니까? – Tanner

+0

이 쿼리는 SQL Management Studio를 사용하여 작동합니까? 거기에서 실행하려고 할 때 더 좋은 오류 메시지가 나타나거나 오류 메시지가 없어서 다른 장소에서 문제를 찾을 수 있습니다. –

답변

0

문제를 직접 해결할 수는 없지만 INSERT 필드를 제거하는 것은 현재 날짜/시간을 삽입하고 데이터베이스의 기본값으로 SQL Server의 GETDATE()을 사용하는 경우 두 개의 datetime 필드를 제거하는 것입니다 전지.

GETDATE()는

오프셋 데이터베이스 시간대없는 시간 값으로서 현재의 데이터베이스 시스템 타임 스탬프를 반환. 그래서 같이 뭔가를

select getdate() -- output: 2014-10-21 13:50:00.627 

그래서 당신이 GETDATE()에 해당 필드의 기본값을 변경할 수 있습니다 : 당신이 실행하는 경우

, 현재 타임 스탬프를 얻을

ALTER TABLE user_accounts ADD CONSTRAINT 
DF_user_accounts_uacc_date_last_login DEFAULT GETDATE() FOR uacc_date_last_login 
GO 
ALTER TABLE user_accounts ADD CONSTRAINT 
DF_user_accounts_uacc_date_added DEFAULT GETDATE() FOR uacc_date_added 
GO 

또는 디자이너를 통해를 :

enter image description here

이렇게하면 SQL 서버는 insertdatetime 값을 추가 할 수 있습니다.

+0

감사합니다. 내 목숨을 구해줬습니다. D –

0

YMD가 아닌 서버에서 사용중인 날짜 형식 일 가능성이 큽니다. 나는 SSMS에서 다음을 실행하면 내가

Declare @MyDate [datetime] ; 
Set DATEFORMAT DMY 
select @MyDate = '2014-10-21 12:01:18' ; 

메시지 242, 수준 16, 상태 3, 3 호선 날짜 시간 데이터 유형에 VARCHAR 데이터 유형의 변환이 결과 해당 오류 얻을 밖으로에게 외 범위 값.

이 작동하는 동안

Declare @MyDate [datetime] ; 
Set DATEFORMAT YMD ; 
select @MyDate = '2014-10-21 12:01:18' ; 
관련 문제