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:
1 2
| -- Lappel de la procédure
EXEC spGetValueColumn 'SELECT ''Col1'' AS ColName , ''Col2'' as ColValue FROM Table' |
-- La procédure spGetValueColumn
Code:
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:
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:
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 |