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