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
-- La procédure spGetValueColumn
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 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
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
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
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
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
Partager