Est-il possible d'exécuter une requête SQL sans afficher les résultats ?
comme
Select * from Table_Name
après l'exécution de cette requête, le résultat ne doit pas s'afficher dans le serveur SQL.
Est-il possible d'exécuter une requête SQL sans afficher les résultats ?
comme
Select * from Table_Name
après l'exécution de cette requête, le résultat ne doit pas s'afficher dans le serveur SQL.
Je suis surpris que la communauté ne puisse pas facilement trouver un cas d'utilisation pour cela. Les grands ensembles de résultats prennent de la mémoire sur le client, ce qui peut devenir un problème si de nombreuses fenêtres SSMS sont actives (il n'est pas inhabituel pour moi d'avoir 2 ou 3 instances de SSMS ouvertes, chacune avec 50 à 70 fenêtres actives). Dans certains cas, comme dans l'exemple de Cyril, SSMS peut manquer de mémoire et être tout simplement incapable de gérer un grand ensemble de résultats. Par exemple, il m'est arrivé de devoir déboguer une procédure stockée renvoyant des centaines de millions de lignes. Il aurait été impossible de l'exécuter dans SSMS sur ma machine de développement sans rejeter les résultats. La procédure était destinée à un paquet SSIS utilisé comme source de données pour le chargement d'une table d'entrepôt de données. Le débogage dans SSMS impliquait d'apporter des modifications non fonctionnelles (de sorte que l'ensemble des résultats ne m'intéressait pas) et d'inspecter les statistiques d'exécution et les plans d'exécution réels de la requête.
J'avais besoin d'une procédure pour retourner tous les enregistrements mis à jour par un utilisateur spécifié après un certain temps, en ne montrant que les résultats où des enregistrements existent. Le voici :
-- Written by David Zanke
-- Return all records modified by a specified user on or after a specified date.
If mod date does not exist, return row anyhow
Set Nocount on
Declare @UserName varchar(128) = 'zanked'
, @UpdatedAfterDate Varchar( 30) = '2016-10-08'
, @TableName varchar( 128)
, @ModUser varchar( 128)
, @ModTime varchar( 128)
, @sql varchar( 2000 )
-- In a perfect world, left join would be unecessary since every row that captures the last mod user would have last mod date.
-- Unfortunately, I do not work in a perfect world and rows w/ last mod user exist w/o last mod date
Declare UserRows Cursor for Select distinct c1.table_name, c1.column_name, c2.column_name From INFORMATION_SCHEMA.COLUMNS c1
Left Join INFORMATION_SCHEMA.COLUMNS c2 On c1.Table_Name = c2.Table_Name And c2.Column_name like '%DTTM_RCD_LAST_UPD%'
Where c1.column_name like '%UPDATED_BY_USER%'
Open UserRows
Fetch UserRows Into @tablename, @ModUser, @ModTime
While ( @@FETCH_STATUS = 0 )
Begin
-- capture output from query into a temp table
Select @sql = 'Select ''' + @TableName + ''' TableName, * Into ##HoldResults From ' + @TableName + ' Where ' + @ModUser + ' = ''' + @userName + ''''
+ Case When @ModTime Is Null Then '' Else ' And ' + @ModTime + ' >= ''' + @UpdatedAfterDate + '''' End
Exec ( @sql)
-- only output where rows exist
If @@ROWCOUNT > 0
Begin
Select * from ##HoldResults
End
Drop Table ##HoldResults
Fetch UserRows Into @tablename, @ModUser, @ModTime
End
Close UserRows;
Deallocate UserRows
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.