Il existe plusieurs scripts de migration de données dans mon projet SSDT.Erreur "nom de colonne non valide" lors de l'utilisation de scripts de migration de données
données première stocke d'une table à une autre table temporaire:
IF EXISTS
(
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = N'DocumentEvent'
AND column_name = N'Thumbprint'
)
BEGIN
IF NOT EXISTS
(
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = N'tmp_DocumentEventCertificates'
)
BEGIN
CREATE TABLE tmp_DocumentEventCertificates
(
[EventId] UNIQUEIDENTIFIER NOT NULL,
[Thumbprint] nvarchar(100)
)
END
INSERT INTO
tmp_DocumentEventCertificates
SELECT
[EventId],
[Thumbprint]
FROM
[DocumentEvent]
WHERE
[Thumbprint] IS NOT NULL
END
données deuxième transferts de table temporaire à une autre table:
IF EXISTS
(
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = N'tmp_DocumentEventCertificates'
)
BEGIN
UPDATE
[DocumentAttachment]
SET
[DocumentAttachment].[Certificate_Thumbprint] = tmp.[Thumbprint]
FROM
tmp_DocumentEventCertificates AS tmp
WHERE
([DocumentAttachment].[EventId] = tmp.[EventId]) AND
([DocumentAttachment].[ParentDocumentAttachmentId] IS NOT NULL)
DROP TABLE tmp_DocumentEventCertificates
END
colonne [Thumbprint]
est retirée de la table [DocumentEvent]
. La colonne [Certificate_Thumbprint]
est en cours d'ajout au tableau [DocumentAttachment]
.
Les données doivent être transférées de [DocumentEvent].[Thumbprint]
à [DocumentAttachment].[Certificate_Thumbprint]
.
Ces scripts fonctionne comme prévu, lorsque la base de données est à l'état, ce qui nécessite la migration d'en haut, qui est, [DocumentEvent].[Thumbprint]
existe et [DocumentAttachment].[Certificate_Thumbprint]
n'existe pas.
Mais lors de la migration de la base de données, toutes les tentatives de déploiement de dacpac échouent en raison de l'erreur "Nom de colonne invalide 'Empreinte" ". Je suis presque sûr, que cela se produit parce que SQLCMD essaie de compiler le script de déploiement en entier, et cela pourrait être fait avec succès seulement quand [DocumentEvent].[Thumbprint]
existe.
Mais quelle est la solution de contournement?
On dirait que IF EXISTS
dans le premier script ne peut pas aider.
Merci beaucoup! Cela fonctionne pour moi. – Dennis