J'ai une table créée en 1990 (oui, il y a 27 ans) qui a un PK de substitution et beaucoup de lignes dupliquées. Je migre la table d'Access to SQL Server et j'ai supprimé le champ de clé de substitution, mais j'essaie de comprendre comment inclure une colonne calculée à partir de deux colonnes source pouvant contenir des valeurs nulles. Cela fonctionne pour moi:La colonne calculée avec la date et le numéro, mais pas les deux, peut être nulle, dans PK
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)
...
)
mais il ne me permet pas d'entrer des lignes avec nulles dates d'effet. Je veux faire quelque chose comme convertir des dates nulles en blancs pour le champ clé, ou même une valeur statique comme 1/1/1900 00:00:00
, mais je ne peux pas obtenir la bonne syntaxe.
J'ai essayé d'ajouter isnull(date,'')
avant la conversion à varchar
, après la conversion, et après l'ajout du séparateur, mais ils ne fonctionnent pas, et j'ai aussi essayé d'ajouter isnull(date,'1900-01-01 00:00:00')
mais cela ne fonctionne pas non plus.
Lorsque je tente:
[EffectiveSalaryKey] AS
(
CONVERT(
[varchar](20),isnull([Action Effective Date],''),20
)
il dit:
Computed column 'EffectiveSalaryKey' in table 'ActionHistory' cannot be persisted because the column is non-deterministic.
Je fais cela avec le script, en dehors de l'interface graphique, comme je crois comprendre qu'il ya un bug là-bas pour ce type d'affectation . Je comprends également que le style doit être fourni lors de la conversion de la date en varchar. S'il vous plaît laissez-moi savoir comment je devrais ajouter ces valeurs de champ afin que je puisse utiliser la colonne calculée dans le cadre de la PK.
Merci,
-Beth
Avant de faire quoi que ce soit d'autre que vous devez arrêter le stockage dans le texte brut SSN. Non seulement c'est incroyablement irresponsable, mais c'est illégal dans de nombreux États. Et certains états ont des précédents juridiques qu'ils peuvent vous tenir responsable si vous avez ce type d'information qui est violé même si vous ne faites pas d'affaires dans cet état. Le Massachusetts est un de ces états. Le SSN doit être salé et haché. Il doit être chiffré à tout moment. –
En fait, il y a beaucoup de choses que je devrais faire avec ces données, mais pour le moment, je suis concentré sur le déplacement vers un autre backend où RI est appliqué. – Beth
Bien utiliser SSN en texte clair dans le cadre d'une clé primaire est tout simplement horrible. J'espère vraiment que mes données sont loin de ce système.Je ressens votre douleur à cause des affaires, vous obligeant à vous en tenir à la tâche, mais sérieusement, cela pose beaucoup de problèmes et tout ce que vous faites pour maintenir ce type de données est un travail qui devra être corrigé à un moment donné. réparation. Le cryptage de ces données doit être prioritaire, car votre entreprise est exposée à un certain nombre de raisons juridiques. J'enverrais le drapeau et suggérerais de parler avec un avocat. Je ne plaisante pas. C'est sérieux. –