2017-09-26 3 views
0

나는 기본이 Scalar-valued function계산 제약 열을 다른 열을 기준으로 정의하는 방법을

이를 사용하여 다른 열을 기반으로 열을 제한하는 예입니다 추가하고 싶은 : 나는 열을 필요

CREATE TABLE [MyTable] 
(
    [Id] [int] NOT NULL 
    [ScrambledId] [int] NOT NULL 
) 

ALTER TABLE [MyTable] ADD DEFAULT (dbo.MakeItScrambled([Id])) FOR [ScrambledId] 

CREATE function [dbo].MakeItScrambled(@Value int) 
BEGIN 
    --Some logic 
    retrun @ScrambledValue 
END 

[ScrambledId] 열을 기반으로 스크램블 할 [Id]

열 이름이 허용되지 않는 것 같습니다 :

The name "Id" is not permitted in this context. Valid expressions are constants, constant expressions, and (in some contexts) variables. Column names are not permitted.

제안 사항?

답변

1

계산 된 열을 추가하지 않았으므로 일반 열을 생성하고 기본값을 추가하려고했습니다. 기본 제한 조건에서 다른 열을 참조 할 수 없습니다.

편집 :이 올릴 오류 :

Computed column 'ScrambledId' cannot be persisted because the column is non-deterministic

당신은 테이블 정의 사용 후 계산 된 열을 원하는 경우에 ... [ScrambledId] AS dbo.MakeItScrambled([Id]) PERSISTED - 당신의 기반 calcuting 곳 지속 사용하여 내가 제안 스칼라 함수.

또는 [ID]를 삽입하거나 업데이트 할 때 [ScrambledId] 값을 설정하기 위해 업데이트/삽입 트리거를 추가 할 수 있습니다.

+0

나는 첫 번째 방법을 시도하고 오류가 발생합니다. 열이 비 결정적이기 때문에 계산 된 열 'ScrambledId'를 유지할 수 없습니다. –

+1

흠, 스칼라 함수를 사용하여 두려웠다. ..... 2 옵션을 사용하고 지속성을 떨어 뜨린 다음 다시 계산하거나 업데이트/삽입 트리거를 작성하십시오. – SQLBadPanda