2017-07-19 11 views
2

J'ai une tâche de flux de données SSIS qui prend des enregistrements de recherche correspondants et les envoie à un composant de commande OLE DB. Quand je le lance, je reçois une erreur qui dit:Pourquoi la commande OLE DB tente-t-elle de mettre à jour le schéma?

Error: 0xC0202009 at Data Flow Task, OLE DB Command [28]: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80040E14. 
An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80040E14 Description: "Property cannot be added. Property 'MS_Description' already exists for 'dbo.d_date.d_date_key'.". 

My SQL est:

UPDATE d_date 
SET company_year_period = ?, 
    company_quarter = ?, 
    company_year_quarter = ?, 
    company_quarter_year = ?, 
    company_first_day_of_week = ?, 
    company_last_day_of_week = ?, 
    is_company_holiday = ?, 
    company_special_event = ?, 
    is_us_holiday = ?, 
    us_special_event = ?, 
    is_canadian_holiday = ?, 
    canadian_special_event = ?, 
    is_mexican_holiday = ?, 
    mexican_special_event = ? 
WHERE d_company_key = ? 
AND calendar_date = ? 

Pourquoi cette composante/simple mise à jour avec les propriétés Messing étendues?!?

Pour être complet, voici le code que j'ai utilisé lorsque j'ai créé la table.

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Primary key for the d_date table. While it is a surrogate key it never the less has the form yyyymmdd.' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'd_date', @level2type=N'COLUMN',@level2name=N'd_date_key' 

Here is the data flow

CREATE TRIGGER d_date_update ON d_date 
AFTER UPDATE 
AS 
    UPDATE d_date 
    SET last_update = GETDATE() 
    WHERE d_date_key IN (SELECT DISTINCT d_date_key FROM Inserted) 
; 

j'ai une table, d_date, avec des propriétés étendues de MS_Description pour chaque colonne. La table est remplie avec 2558 enregistrements de date. J'ai une seconde table de travail sans les propriétés étendues. Il est également peuplé de quelques enregistrements légèrement différents. La mise à jour suivante échoue:

UPDATE dd 
SET dd.company_year_period = wdd.company_year_period, 
dd.company_quarter = wdd.company_quarter, 
dd.company_year_quarter = wdd.company_year_quarter, 
dd.company_quarter_year = wdd.company_quarter_year, 
dd.company_first_day_of_week = wdd.company_first_day_of_week, 
dd.company_last_day_of_week = wdd.company_last_day_of_week, 
dd.is_company_holiday = wdd.is_company_holiday, 
dd.company_special_event = wdd.company_special_event, 
dd.is_us_holiday = wdd.is_us_holiday, 
dd.us_special_event = wdd.us_special_event, 
dd.is_canadian_holiday = wdd.is_canadian_holiday, 
dd.canadian_special_event = wdd.canadian_special_event, 
dd.is_mexican_holiday = wdd.is_mexican_holiday, 
dd.mexican_special_event = wdd.mexican_special_event 
FROM d_date AS dd 
LEFT JOIN working_d_date AS wdd ON wdd.d_company_key = dd.d_company_key 
AND wdd.calendar_date = dd.calendar_date 

(2558 row(s) affected) 
Msg 15233, Level 16, State 1, Procedure sp_addextendedproperty, Line 37 
Property cannot be added. Property 'MS_Description' already exists for 'dbo.d_date.d_date_key'. 

FINAL COMMENTAIRE: Je courais tout cela sur SS2014 Enterprise que j'ai mis sur mon poste de travail en utilisant la licence d'essai. Je ne suis pas un DBA donc les chances sont bonnes que je n'ai pas quelque chose configuré correctement. J'ai transféré tout sur notre serveur de production SS2008 R2 et je ne vois aucun problème. Cela pourrait être un problème entre 2014 et 2008, mais plus probablement un problème d'installation avec mon installation de 2014. Je revisite à nouveau lorsque nous installons formellement 2014.

+0

Y a-t-il une chance qu'un déclencheur soit attaché à la table? – billinkc

+0

Je suis en train de mettre à jour une colonne last_update. –

+0

Souhaitez-vous publier la définition du déclencheur? Cliquez sur le bouton Modifier et corrigez-le dans la question – billinkc

Répondre

1

conjecture sauvage:

Lorsque vous avez Create Trigger vous avez inclus l'appel à sp_addextendedproperty dans le même lot ..

CREATE TRIGGER d_date_update ON d_date 
AFTER UPDATE 
AS 
    UPDATE d_date 
    SET last_update = GETDATE() 
    WHERE d_date_key IN (SELECT DISTINCT d_date_key FROM Inserted) 


; 
--- THIS IS YOUR PROBLEM!!!! 
--- This has been included in the trigger itself. 
EXEC sys.sp_addextendedproperty @name=N'MS_Description', 
    @value=N'Primary key for the d_date table. While it is a surrogate key it never the less has the form yyyymmdd.' , 
     @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'd_date', @level2type=N'COLUMN',@level2name=N'd_date_key' 

Le déclencheur continue à la fin du lot. point-virgule ne se termine pas le lot il se termine seulement la déclaration. Vous devez indiquer GO pour terminer le lot. Un peu plus de discussion: règles de portée pour SQL ne sont pas du tout C#. Vous pourriez imaginer qu'un déclencheur consiste en une seule instruction, qui peut être soit une instruction de bloc, soit une simple instruction, ce qui serait une hypothèse naturelle, mais ce n'est pas le cas.

Une fois que vous dites "CREATE TRIGGER", "CREATE PROCEDURE" ou "CREATE FONCTION", tout à la fin du lot fait partie du déclencheur, proc ou la fonction . Cela est curieux, d'autant plus que «d_date_key» n'existe pas dans le code fourni.