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 :

Procédure stockée paramétrée - SQL dynamique - nom de colonne entre quote- EXEC


Sujet :

Développement SQL Server

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    janvier 2010
    Messages
    919
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2010
    Messages : 919
    Points : 849
    Points
    849
    Billets dans le blog
    26
    Par défaut Procédure stockée paramétrée - SQL dynamique - nom de colonne entre quote- EXEC
    Bonjour à tous,


    Je galère avec l'appel d'une procédure stockée avec en paramètre un requête SQL dans laquelle je déclare le nom de colonnes en "dur" et je n'arrive pas à gérer le nombre de quotes à passer autour de ''Col1'' et ''Col2'' voire sur @vEXEC

    Merci pour toute aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    -- Lappel de la procédure 
    EXEC spGetValueColumn  'SELECT ''Col1'' AS ColName , ''Col2'' as ColValue  FROM Table'
    -- La procédure spGetValueColumn
    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
     
    ALTER PROCEDURE [dbo].[spGetValueColumn]
    	-- Add the parameters for the stored procedure here
    	 @pSQL nvarchar(max) 
     
    	 AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
     
    	DECLARE @vSQL nvarchar(max),
    			@vEXEC nvarchar(max),
    			@vNbrQuote int
     
        -- Insert statements for procedure here
     
    	--set @vSQL = dbo.ufn_QuoteEscape (@pSQL)
    	set @vNbrQuote = 2
    	--set @vSQL  = dbo.ufn_QuoteEscape(@pSQL,@vNbrQuote)
     
    	--SELECT (@vSQL)
    	--RETURN 
     
    	set @vEXEC = N'SELECT * INTO ##tbl ' 
    				+ ' FROM (' 
    				+ @pSQL
    				+ ')  t'
     
    	set @vEXEC  = dbo.ufn_QuoteEscape(@vEXEC ,@vNbrQuote)
    	--set @vEXEC  = dbo.ufn_QuoteBetween(@vEXEC)
    	--SELECT @vEXEC  
    	--RETURN
     
    	Exec (@vEXEC) --EXEC sp_executesql @vSQL -> sp_executesql supports parameterisation, whereas EXEC only accepts a string.
     
    	SELECT * FROM ##tbl  
     
    	DROP TABLE ##tbl
     
    END
    -- La fonction ufn_QuoteEscape
    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
     
    ALTER FUNCTION [dbo].[ufn_QuoteEscape](
    	@pValue nvarchar(max),
    	@pNbrQuote int)  
     
    RETURNS 
    	nvarchar(max)
    AS  
     
    BEGIN  
        DECLARE @vRet nvarchar(max)
     
    	if @pNbrQuote = 1 begin
    		set @vRet =  char(39) + replace(@pValue , '''', '''''') + char(39) 
    	end
     
    	if @pNbrQuote = 2 begin
    		set @vRet =  char(39) + replace(@pValue , '''', '''''''') + char(39) 
    	end
     
    	RETURN @vRet  
    END
    Et enfin la fonction ufn_QuoteBetween

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ALTER FUNCTION [dbo].[ufn_QuoteBetween] (@pValue nvarchar(max))  
    RETURNS nvarchar(max)
    AS  
    BEGIN  
        DECLARE @vRet nvarchar(max)
     
    	set @vRet = char(39) + @pValue + char(39)
     
    	RETURN @vRet  
    END
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Consultant Teradata
    Inscrit en
    septembre 2008
    Messages
    8 191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Teradata
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2008
    Messages : 8 191
    Points : 17 073
    Points
    17 073
    Par défaut
    Simplement sans rien du tout non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    -- Lappel de la procédure 
    EXEC spGetValueColumn  'SELECT Col1 AS ColName , Col2 as ColValue  FROM Table'

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/05/2009, 12h57
  2. Réponses: 2
    Dernier message: 30/09/2008, 14h49
  3. Réponses: 0
    Dernier message: 30/09/2008, 01h14
  4. Réponses: 4
    Dernier message: 19/05/2005, 14h18
  5. Procédures stockées imbriquées SQL Server
    Par Mike69 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/10/2003, 10h31

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