IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

[2005] Query Dynamic + GO


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut [2005] Query Dynamic + GO
    Bonjour j'ai un soucis avec un query dynamic.

    Je dois changer une view sur plusieurs DB et j'ai donc songé à utiliser un query dynamic.
    Deux problèmes surviennent :
    1) On ne peut pas utiliser de nom de schéma pour y créer une view
    2) ALTER VIEW doit être le premier élément du batch

    J'ai donc pensé utiliser USE <schema> et GO mais ce "GO" cause une erreur syntaxique.
    J'ai lu que c'était un problème de codage du retour à la ligne, j'ai essayé de remplacer quelques retours à la lgine clés par CHAR(13) + CHAR(10) (ou vice-versa, je ne sais plus) et ça n'a pas aidé.

    Voici ma dernière tentative :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    DECLARE @Statement NVARCHAR(MAX)
    DECLARE @VarStatement NVARCHAR(MAX)
     
    SET @Statement = 
    N'
    CREATE SYNONYM dbo.SYNV FOR {name}.[dbo].[ISSCompetitionsPlayers]
    GO
     
    ALTER VIEW SYNV
    AS
    SELECT 
    M.Id AS Id
     
    , LHCP.Handicap AS Hcp
    , M.Lname AS Lname
    , M.Fname AS Fname
    , M.MFname AS MFname
    , M.birthdate AS birthdate
    , CM.Status AS Status
    , M.FederalNumber AS fedNum
     
    , CM.IdClub AS clubID
    , C.id AS compID
     
    FROM MyGolf.dbo.tMembers AS M
    INNER JOIN MyGolf.dbo.tClubMembers AS CM ON (
    	CM.IdMember = M.Id
    )
    LEFT JOIN MyGolf.dbo.tLastHandicaps AS LHCP ON (
    	LHCP.idmember = M.Id
    )
    CROSS JOIN {name}.dbo.Competitions AS C
    WHERE M.FederalNumber <> ''''
    AND EXISTS (
    	SELECT TOP(1)
    		1
    	FROM {name}.dbo.vMembersCategory AS CAT
    	WHERE CAT.memberID = M.Id
    	AND	CAT.Type = ''Tee''
    	AND	CAT.compID = C.id
    	AND (C.locked = 0 OR CAT.IsExactMatch = 1)
     
    )
    GO
     
    DROP SYNONYM SYNV
    GO
    '
     
    DECLARE cur CURSOR FOR 
    SELECT DBName
    FROM tManagement_Websites
    INNER JOIN sys.databases AS DB ON (
    	DB.name = tManagement_Websites.DBName COLLATE FRENCH_CI_AS
    )
     
    DECLARE @DBName VARCHAR(50)
     
    OPEN cur
     
    FETCH NEXT FROM cur  INTO @DBName
    WHILE(@@FETCH_STATUS = 0)
    BEGIN
    	SET @VarStatement = REPLACE(@Statement, '{name}', @DBName)
     
    	EXECUTE sp_executesql @VarStatement
     
    	FETCH NEXT FROM cur  INTO @DBName
    END
     
    CLOSE cur
    DEALLOCATE cur
    Merci pour votre aide.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    GO n'est pas une commande SQL. C'est un commande qui s'adresse à l'interpréteur de commande (outil client) qu'est sqlcmd, ou SSMS. Cette commande consiste à séparer en lots exécutés en série vos différentes commande regroupée dans un seul et même batch.

    Pour faire de même en dynamique il faut lancer n EXEC en découpant de même.

    En sus, vous avez une difficulté car SQL Server n'autorise pas à préfixer par le nom de la base pour certains ordres du DDL comme ALTER ou CREATE VIEW.

    Pour faire cela le mieux est de créer un batch utilisant sqlcmd.

    A +

    Peut être une petite formation SQL Server serait-elle la bienvenue ????
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    GO n'est pas une commande SQL. C'est un commande qui s'adresse à l'interpréteur de commande (outil client) qu'est sqlcmd, ou SSMS. Cette commande consiste à séparer en lots exécutés en série vos différentes commande regroupée dans un seul et même batch.

    Pour faire de même en dynamique il faut lancer n EXEC en découpant de même.

    En sus, vous avez une difficulté car SQL Server n'autorise pas à préfixer par le nom de la base pour certains ordres du DDL comme ALTER ou CREATE VIEW.

    Pour faire cela le mieux est de créer un batch utilisant sqlcmd.

    A +

    Peut être une petite formation SQL Server serait-elle la bienvenue ????
    J'ai pu lire que plusieurs personnes avaient créé des query dynamiques avec des GO (qui pourtant n'est pas un élément transact sql à proprement parler comme nous le savons tout deux), et c'est la raison pour laquelle je suis cette piste.

    J'ai aussi lu qu'on pouvait imbriquer des query dynamiques (ce qui m'étonnera quand j'essaierai) afin de contourner certains problèmes.
    L'idée de générer un batch pour l'exécuter ensuite est d'ailleurs du même accabis (et je l'adopterai si l'imbriquation se révèle être un echec).

    Nous irons découvrir ensemble les B.A-BA de SQL server à une autre occasion.

Discussions similaires

  1. [.NET 2005]Query sur plusieurs tables d'un dataset
    Par legillou dans le forum VB.NET
    Réponses: 1
    Dernier message: 01/02/2008, 10h29
  2. Log de toutes les query sur SQL SERVER 2005
    Par yonialhadeff dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/06/2007, 14h00
  3. [Delphi 2005 Perso] In avec tableau dynamic
    Par Qwazerty dans le forum Delphi
    Réponses: 5
    Dernier message: 08/04/2007, 19h55
  4. Dynamic Query "from"
    Par ReunionIsland dans le forum BIRT
    Réponses: 5
    Dernier message: 26/07/2006, 14h31
  5. [Delphi 2005] Lancer des requêtes MicroSoft Query
    Par Frank dans le forum Bases de données
    Réponses: 2
    Dernier message: 21/10/2005, 19h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo