none
Requete T-sql RRS feed

  • Question

  • bonjour,

    Je cherche actuellement une aide pour développer un script de mise  à jours

    j'ai actuellement cette requête

    UPDATE [DOC_TABLEPARTS]
    SET [DOC_TABLEPARTS].AL_IMAGE = picName 
    from pic00003 inner join
    DOC_TABLEPARTS  on pic00003.ArtNr COLLATE FRENCH_CI_AS = DOC_TABLEPARTS.Refnumber
    where SupplierCode = 3
    

    qui marche très bien c 'est pour mettre a jour le nom d'image dans une base produits (les image sont stocker dans une autre database.

    le probleme c'est que la database d'image est composer de + 300 databases ! il faudrait que je réécrive 300 fois cette requête

    en changent le suppliercode qui correspond au nom de la base  [suppliercode 3 = database pic00003]

    comment faire en sorte que cette requête puisse ce générer automatiquement CAD

    lecture de database pic --> extraction du nom de la première table pic00002 ----> exécution de mon update plus haut (suppliercode a 2) -> boucle jusqua ce que la table pic sois passer en revu.

    merci de me donner une piste

    samedi 18 janvier 2014 18:37

Réponses

  • Hello, Bon théoriquement, ça ferait un truc du style :

    -- Variable pour le nom de la table à mettre à jour. DECLARE @Table_Name varchar(80); -- Variable pour la commande d'update. DECLARE @sqlstring AS NVARCHAR(1000); -- Variable pour le supplier Code. DECLARE @SupplierCode as int;

    SET @SupplierCode = 0; -- Declare un cursor pour la liste des tables qui commencent par pic DECLARE tables_cursor CURSOR FOR SELECT Table_name FROM information_schema.tables where table_type = 'BASE TABLE' and Table_name like 'pic%' order by Table_name asc; OPEN tables_cursor FETCH NEXT FROM tables_cursor INTO @Table_Name WHILE @@FETCH_STATUS = 0 BEGIN Set @SupplierCode = @SupplierCode + 1; -- Definition du SupplierCode. -- Voir l'algo qui te convient.

    -- cast(replace(@Table_Name,'pic','') as int) SET @sqlstring=N'UPDATE [DOC_TABLEPARTS] SET [DOC_TABLEPARTS].AL_IMAGE = picName from ' + @Table_Name + N' as picTable inner join DOC_TABLEPARTS on picTable.ArtNr COLLATE FRENCH_CI_AS = DOC_TABLEPARTS.Refnumber where SupplierCode = '+ cast(@SupplierCode as varchar(5)) + N';'; EXEC sys.sp_executesql @statement = @sqlstring; END CLOSE tables_cursor; DEALLOCATE tables_cursor;






    lundi 20 janvier 2014 10:06

Toutes les réponses

  • Hello, 

    Pour ton problème, j'utiliserais 2 choses :

    - Un Cursor pour l'itération sur tes tables

    - D'utiliser les dynamic SQL paramétrés.  (EXEC sys.sp_executesql @statement='string requête', @param = '@param1 as int', @param1 = 2).

    Je regarde si j'ai un petit moment dans la journée pour développer.


    lundi 20 janvier 2014 09:38
  • Hello, Bon théoriquement, ça ferait un truc du style :

    -- Variable pour le nom de la table à mettre à jour. DECLARE @Table_Name varchar(80); -- Variable pour la commande d'update. DECLARE @sqlstring AS NVARCHAR(1000); -- Variable pour le supplier Code. DECLARE @SupplierCode as int;

    SET @SupplierCode = 0; -- Declare un cursor pour la liste des tables qui commencent par pic DECLARE tables_cursor CURSOR FOR SELECT Table_name FROM information_schema.tables where table_type = 'BASE TABLE' and Table_name like 'pic%' order by Table_name asc; OPEN tables_cursor FETCH NEXT FROM tables_cursor INTO @Table_Name WHILE @@FETCH_STATUS = 0 BEGIN Set @SupplierCode = @SupplierCode + 1; -- Definition du SupplierCode. -- Voir l'algo qui te convient.

    -- cast(replace(@Table_Name,'pic','') as int) SET @sqlstring=N'UPDATE [DOC_TABLEPARTS] SET [DOC_TABLEPARTS].AL_IMAGE = picName from ' + @Table_Name + N' as picTable inner join DOC_TABLEPARTS on picTable.ArtNr COLLATE FRENCH_CI_AS = DOC_TABLEPARTS.Refnumber where SupplierCode = '+ cast(@SupplierCode as varchar(5)) + N';'; EXEC sys.sp_executesql @statement = @sqlstring; END CLOSE tables_cursor; DEALLOCATE tables_cursor;






    lundi 20 janvier 2014 10:06
  • Bonjour

    Ce que  Kjorel vous a proposé c'est la solution élégante.
    J'utilise souvent une astuce (il y a des choses qu'on doit les faire une seule fois): on fait copier-coller avec les tables dans Excel, on applique la fonction CONCATENATE pour composer les requêtes, et de nouveau copier dans Excel  et coller dans SQL Management Studio pour les exécuter.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 20 janvier 2014 11:53
    Modérateur
  • Bonjour

    Un petit retour, SVP?

    Merci!

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mardi 21 janvier 2014 13:29
    Modérateur