2016-11-24 1 views
1

(스위치 대신 USER_NAME하는) 테이블 제약의 기본 SESSION_USER를 사용 할 수 없습니다 :다음과 같이 내가 예를 들어 <code>SESSION_USER</code>의 기본값과 제약 조건을 정의

CREATE TABLE [test] (col1 varchar(50)) 
GO 
ALTER TABLE [test] ADD CONSTRAINT [x] DEFAULT SESSION_USER FOR [col1] 
GO 

이 잘 실행하는 것 - Command(s) completed successfully.

-

그러나 다음과 같이 실제 정의는 예는 user_name() 기능을 사용하도록 수정되었습니다 :

ALTER TABLE [dbo].[test] ADD CONSTRAINT [x] DEFAULT (user_name()) FOR [col1] 

왜 이거 야?

답변

1

SESSION_USER 때문에 USER_NAME() 동의어입니다 :

당신이 SQL Server 인스턴스에 연결되어

, 사용자 이름 또는 사용자 ID를 얻기 위해 다음 사용

을 ...

  • ISO CURRENT_USER 또는 SESSION_USER은 현재 연결과 관련된 데이터베이스 사용자 이름을 얻는 기능을합니다. Transact-SQL에서 이러한 함수는 USER_NAME()의 동의어로 구현됩니다. (USER_NAMEdatabase_user_ID 매개 변수없이 지정됩니다.) Transact-SQL 함수 USERUSER_NAME()의 동의어 인 으로 구현됩니다.

(출처 : MSDN).

제약 조건은 저장 프로 시저처럼 그대로 저장되는 것이 아니라 컴파일시 일반 양식으로 축소됩니다. 여분의 괄호도 추가되었음을 알 수 있습니다. 리터럴 정의가 유지되지 않지만 의미는 다음과 같습니다.

관련 문제