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

Author: Titanfall —

Short summary: 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), […]

Quick overview

Site
Tutos GameServer
Canonical URL
https://tutos-gameserver.fr/2019/05/02/tsql-sql-server-print-select-imprimer-un-resultat-de-requete-select-bien-choisir-son-serveur-d-impression/
LLM HTML version
https://tutos-gameserver.fr/2019/05/02/tsql-sql-server-print-select-imprimer-un-resultat-de-requete-select-bien-choisir-son-serveur-d-impression/llm
LLM JSON version
https://tutos-gameserver.fr/2019/05/02/tsql-sql-server-print-select-imprimer-un-resultat-de-requete-select-bien-choisir-son-serveur-d-impression/llm.json
Manifest
https://tutos-gameserver.fr/llm-endpoints-manifest.json
Estimated reading time
5 minutes (256 seconds)
Word count
851

Key points

Primary visual

tsql – SQL Server PRINT SELECT (Imprimer un résultat de requête select)?

 – Bien choisir son serveur d impression
Main illustration associated with the content.

Structured content

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]

Topics and keywords

Themes: Serveur d'impression

License & attribution

License: CC BY-ND 4.0.

Attribution required: yes.

Manifest: https://tutos-gameserver.fr/llm-endpoints-manifest.json

LLM Endpoints plugin version 1.1.2.