Serveur d'impression

tsql – SQL Server PRINT SELECT (Imprimer un résultat de requête select)? – Bien choisir son serveur d impression

Par Titanfall , le 2 mai 2019 - 5 minutes de lecture

J'ai écrit ce SP pour faire exactement ce que vous voulez, cependant, vous devez utiliser SQL dynamique.

Cela a fonctionné pour moi sur SQL Server 2008 R2

Procédure ALTER [dbo].[PrintSQLResults] 
    @query nvarchar (MAX),
    @numberToDisplay int = 10,
    @padding int = 20
comme

SET NOCOUNT ON;
SET ANSI_WARNINGS ON;

declare @cols nvarchar (MAX),
        @displayCols nvarchar (MAX),
        @sql nvarchar (MAX),
        @printableResults nvarchar (MAX),
        @NewLineChar AS char (2) = char (13) + char (10),
        @Tab AS char (9) = char (9);

si existe (sélectionnez * depuis tempdb.sys.tables où name = '## PrintSQLResultsTempTable') table de suppression ## PrintSQLResultsTempTable

set @query = REPLACE (@query, 'de', 'dans ## PrintSQLResultsTempTable de');
--print @query
exec (@query);
sélectionnez ROW_NUMBER () OVER (ORDER BY (sélectionnez Null)) AS ID12345XYZ, * dans #PrintSQLResultsTempTable
à partir de ## PrintSQLResultsTempTable
déposer la table ## PrintSQLResultsTempTable

sélectionnez le nom
dans #PrintSQLResultsTempTableColumns
à partir de tempdb.sys.columns où object_id =
object_id ('tempdb .. # PrintSQLResultsTempTable');

sélectionnez @cols =
des trucs((
    (sélectionnez '+ espace (1) + (GAUCHE ((CAST ([' + name + '] comme nvarchar (max)) + espace ('+ CAST (@padding comme nvarchar (4)) +')), '+ CAST (@padding comme nvarchar (4)) +')) comme [text()]
    FROM #PrintSQLResultsTempTableColumns
    où nom! = 'ID12345XYZ'
    FOR XML PATH (''), racine ('str'), type) .value ('/ str[1]',' nvarchar (max) '))
, 1,0, '' '' ');

sélectionnez @displayCols =
des trucs((
    (sélectionnez espace (1) + LEFT (nom + espace (@padding), @padding) comme [text()]
    FROM #PrintSQLResultsTempTableColumns
    où nom! = 'ID12345XYZ'
    FOR XML PATH (''), racine ('str'), type) .value ('/ str[1]',' nvarchar (max) '))
, 1,0, '');

DÉCLARER
    @tableCount int = (select count (*) from #PrintSQLResultsTempTable);
DÉCLARER
    @ i int = 1,
    @ii int = cas où @tableCount <@numberToDisplay puis @tableCount else @numberToDisplay end;

print @displayCols - en-tête
Alors que @i <= @ii
COMMENCER
    set @sql = N'select @printableResults = '+ @cols +' + @NewLineChar à partir de #PrintSQLResultsTempTable où ID12345XYZ = '+ CAST (@i comme varchar (3)) +'; print @printableResults; '
    --print @sql
    exécuter sp_executesql @sql, N '@ NewLineChar char (2), @printableResults nvarchar (max) sortie', @NewLineChar = @NewLineChar, @printableResults = @printableResults sortie
    print @printableResults
    SET @ i + = 1;
FIN

Cela a fonctionné pour moi sur SQL Server 2012

Procédure ALTER [dbo].[PrintSQLResults] 
    @query nvarchar (MAX),
    @numberToDisplay int = 10,
    @padding int = 20
comme

SET NOCOUNT ON;
SET ANSI_WARNINGS ON;

declare @cols nvarchar (MAX),
        @displayCols nvarchar (MAX),
        @sql nvarchar (MAX),
        @printableResults nvarchar (MAX),
        @NewLineChar AS char (2) = char (13) + char (10),
        @Tab AS char (9) = char (9);

si existe (sélectionnez * depuis tempdb.sys.tables où name = '## PrintSQLResultsTempTable') table de suppression ## PrintSQLResultsTempTable

set @query = REPLACE (@query, 'de', 'dans ## PrintSQLResultsTempTable de');
--print @query
exec (@query);
sélectionnez ROW_NUMBER () OVER (ORDER BY (sélectionnez Null)) AS ID12345XYZ, * dans #PrintSQLResultsTempTable
à partir de ## PrintSQLResultsTempTable
déposer la table ## PrintSQLResultsTempTable

sélectionnez le nom
dans #PrintSQLResultsTempTableColumns
à partir de tempdb.sys.columns où object_id =
object_id ('tempdb .. # PrintSQLResultsTempTable');

sélectionnez @cols =
des trucs((
    (sélectionnez '+ espace (1) + GAUCHE (CAST ([' + name + '] as nvarchar ('+ CAST (@padding as nvarchar (4)) +)) + espace (' + CAST (@padding as nvarchar (4)) + '),' + CAST (@padding as nvarchar (4)) + ')' comme [text()]
    FROM #PrintSQLResultsTempTableColumns
    où nom! = 'ID12345XYZ'
    FOR XML PATH (''), racine ('str'), type) .value ('/ str[1]',' nvarchar (max) '))
, 1,0, '' '' ');

sélectionnez @displayCols =
des trucs((
    (sélectionnez espace (1) + LEFT (nom + espace (@padding), @padding) comme [text()]
    FROM #PrintSQLResultsTempTableColumns
    où nom! = 'ID12345XYZ'
    FOR XML PATH (''), racine ('str'), type) .value ('/ str[1]',' nvarchar (max) '))
, 1,0, '');

DÉCLARER
    @tableCount int = (select count (*) from #PrintSQLResultsTempTable);
DÉCLARER
    @ i int = 1,
    @ii int = cas où @tableCount <@numberToDisplay puis @tableCount else @numberToDisplay end;

print @displayCols - en-tête
Alors que @i <= @ii
COMMENCER
    set @sql = N'select @printableResults = '+ @cols +' + @NewLineChar à partir de #PrintSQLResultsTempTable où ID12345XYZ = '+ CAST (@i comme varchar (3)) +' '
    --print @sql
    exécuter sp_executesql @sql, N '@ NewLineChar char (2), @printableResults nvarchar (max) sortie', @NewLineChar = @NewLineChar, @printableResults = @printableResults sortie
    print @printableResults
    SET @ i + = 1;
FIN

Cela a fonctionné pour moi sur SQL Server 2014

Procédure ALTER [dbo].[PrintSQLResults] 
    @query nvarchar (MAX),
    @numberToDisplay int = 10,
    @padding int = 20
comme

SET NOCOUNT ON;
SET ANSI_WARNINGS ON;

declare @cols nvarchar (MAX),
        @displayCols nvarchar (MAX),
        @sql nvarchar (MAX),
        @printableResults nvarchar (MAX),
        @NewLineChar AS char (2) = char (13) + char (10),
        @Tab AS char (9) = char (9);

si existe (sélectionnez * depuis tempdb.sys.tables où name = '## PrintSQLResultsTempTable') table de suppression ## PrintSQLResultsTempTable

set @query = REPLACE (@query, 'de', 'dans ## PrintSQLResultsTempTable de');
--print @query
exec (@query);
sélectionnez ROW_NUMBER () OVER (ORDER BY (sélectionnez Null)) AS ID12345XYZ, * dans #PrintSQLResultsTempTable
à partir de ## PrintSQLResultsTempTable
déposer la table ## PrintSQLResultsTempTable

sélectionnez le nom
dans #PrintSQLResultsTempTableColumns
à partir de tempdb.sys.columns où object_id =
object_id ('tempdb .. # PrintSQLResultsTempTable');

sélectionnez @cols =
des trucs((
    (sélectionnez ', espace (1) + LEFT (CAST ([' + name + '] as nvarchar ('+ CAST (@padding as nvarchar (4)) +)) + espace (' + CAST (@padding as nvarchar (4)) + '),' + CAST (@padding as nvarchar (4)) + ')' comme [text()]
    FROM #PrintSQLResultsTempTableColumns
    où nom! = 'ID12345XYZ'
    FOR XML PATH (''), racine ('str'), type) .value ('/ str[1]',' nvarchar (max) '))
, 1,0, '' '' ');

sélectionnez @displayCols =
des trucs((
    (sélectionnez espace (1) + LEFT (nom + espace (@padding), @padding) comme [text()]
    FROM #PrintSQLResultsTempTableColumns
    où nom! = 'ID12345XYZ'
    FOR XML PATH (''), racine ('str'), type) .value ('/ str[1]',' nvarchar (max) '))
, 1,0, '');

DÉCLARER
    @tableCount int = (select count (*) from #PrintSQLResultsTempTable);
DÉCLARER
    @ i int = 1,
    @ii int = cas où @tableCount <@numberToDisplay puis @tableCount else @numberToDisplay end;

print @displayCols - en-tête
Alors que @i <= @ii
COMMENCER
    set @sql = N'select @printableResults = concat (@printableResults, '+ @cols +', @NewLineChar) à partir de #PrintSQLResultsTempTable où ID12345XYZ = '+ CAST (@i as varchar (3))
    --print @sql
    exécuter sp_executesql @sql, N '@ NewLineChar char (2), @printableResults nvarchar (max) sortie', @NewLineChar = @NewLineChar, @printableResults = @printableResults sortie
    print @printableResults
    SET @printableResults = null;
    SET @ i + = 1;
FIN

Exemple:

exec [dbo].[PrintSQLResults] n'select * from MyTable '

Click to rate this post!
[Total: 0 Average: 0]

Commentaires

Laisser un commentaire

Votre commentaire sera révisé par les administrateurs si besoin.