대리 키와 많은 중복 행이있는 1990 년 (예, 27 년 전)에 작성된 테이블이 있습니다. Access에서 SQL Server로 테이블을 마이그레이션하고 대리 키 필드를 삭제했지만 널 값을 포함 할 수있는 두 개의 원본 열에서 계산 된 열을 포함하는 방법을 파악하려고합니다.날짜와 숫자가 포함 된 계산 된 열 (둘 중 하나만 포함될 수 있음)은 PK의 일부로 null 일 수 있습니다.
CREATE TABLE [dbo].[ActionHistory]
(
[Position Number] [int] NOT NULL,
[SSN] [nvarchar](11) NOT NULL,
[Action] [nvarchar](10) NOT NULL,
[EffectiveSalaryKey] AS (CONVERT([varchar](20), [Action Effective Date], 20) + ';' +
CONVERT([varchar](20), isnull([Salary], ''), 0)) PERSISTED NOT NULL,
[Action Effective Date] [datetime] NULL,
[Salary] [money] NULL,
...,
[entered] [datetime] NULL
CONSTRAINT [DF_ActionHistory_entered] DEFAULT (getdate()),
CONSTRAINT [PK_ActionHistory]
PRIMARY KEY CLUSTERED ([Position Number] ASC, [SSN] ASC, [Action] ASC, [EffectiveSalaryKey] ASC)
...
)
을하지만 내가 널 효과적인 날짜와 행을 입력 할 수 없습니다 : 이 나를 위해 작동합니다.
NULL 필드를 키 필드의 공백으로 변환하거나 심지어 1/1/1900 00:00:00
과 같은 정적 값을 변환하고 싶습니다. 그러나 구문을 올바르게 가져올 수 없습니다.
변환 전에 varchar
으로 변환하기 전에 isnull(date,'')
을 추가하려고 시도했지만 구분 기호를 추가 한 후 작동하지 않았고 isnull(date,'1900-01-01 00:00:00')
을 추가하려고했지만 그 중 하나도 작동하지 않았습니다.
[EffectiveSalaryKey] AS
(
CONVERT(
[varchar](20),isnull([Action Effective Date],''),20
)
는 말한다 :
Computed column 'EffectiveSalaryKey' in table 'ActionHistory' cannot be persisted because the column is non-deterministic.
나는 GUI 외부 스크립트로이 일을 해요, 나는 버그가 할당이 유형 거기에있어 이해 . 또한 스타일을 날짜에서 varchar로 변환 할 때 제공해야한다는 것을 알고 있습니다.
계산 된 열을 PK의 일부로 사용할 수 있도록이 필드 값을 추가하는 방법을 알려주십시오.
감사합니다,
-Beth
당신은 일반 텍스트로 SSN을 저장 중지해야합니다. 엄청나게 무책임 할뿐만 아니라 많은 주에서는 불법입니다. 그리고 일부 주에서는 해당 주에서 사업을하지 않더라도 이러한 유형의 정보가 유출 된 경우 책임을 물을 수 있다는 법적 선례가 있습니다. 매사추세츠주는 그러한 주 중 하나입니다. SSN은 소금에 절여 해싱해야합니다. 항상 암호화해야합니다. –
실제로이 데이터로 수행해야 할 많은 작업이 있지만 지금은 RI가 적용되는 또 다른 백엔드로 이동하는 데 중점을 둡니다. – Beth
기본 키의 일부로 일반 텍스트에서 SSN을 사용하는 것은 끔찍한 일입니다. 내 데이터가이 시스템 근처에 있지 않기를 바랍니다.나는 당신이 당면 과제에 집중하도록 강요하는 사업에 대해 고통 스럽다고 느낍니다. 그러나 이것은 심각한 문제를 야기합니다. 이러한 유형의 데이터를 유지하는 것과 관련된 일은 어떤 시점에서 해결되어야 할 작업입니다. 수리. 회사가 여러 가지 법적 이유로 위험에 처해 있으므로 해당 데이터를 암호화하는 것이 우선 순위가되어야합니다. 나는 이것을 기둥 극까지 보내고 그들이 변호사와 이야기 할 것을 제안합니다. 농담 아니야. 이것은 진지한 일입니다. –