Requêtes SQL utiles

Dans cet article, je vais vous expliquer quelques requêtes générales. Je pense que chaque développeur devrait avoir connaissance de ces requêtes. Ces requêtes ne sont pas liées à un sujet spécifique de SQL. Mais la connaissance de telles requêtes peut résoudre certaines tâches complexes et peut être utilisé dans de nombreux scénarios, alors j’ai décidé d’écrire un article sur ces requêtes.

Requête 1 – Split une chaîne de caractère séparée par des virgules

Supposant qu’on a une chaîne de caractère qui contient une liste des pays séparée par des virgules Ex: ‘France, USA, Maroc, Japon’ et qu’on veut avoir cette liste par ligne.

Voici la requête qui permet d’avoir ça :

CREATE TABLE #Country
(
CountryName VARCHAR(80)
)
INSERT #Country VALUES ('France, USA, Maroc, Japon')

SELECT 
LTRIM(RTRIM(m.n.value('.[1]','varchar(8000)'))) AS CountryName
FROM
(
SELECT CAST('<XMLRoot><RowData>' + REPLACE(CountryName,',','</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) AS x
FROM   #Country
)t
CROSS APPLY x.nodes('/XMLRoot/RowData')m(n)

Résultat :

Requête 2 – Derniers Scripts exécutés

Pour avoir la liste des derniers scripts exécutés sur une base de données, voilà la requête :

SELECT execquery.last_execution_time AS [Date Time]
  ,execsql.TEXT AS [Script]
FROM sys.dm_exec_query_stats AS execquery
CROSS APPLY sys.dm_exec_sql_text(execquery.sql_handle) AS execsql
ORDER BY execquery.last_execution_time DESC

Résultat :

2016-12-19_13h45_03

Requête 3 – Liste des tables avec nombre d’enregistrements
CREATE TABLE #Tab  
(   
Table_Name [varchar](max),  
Total_Records int  
);  
EXEC sp_MSForEachTable @command1=' Insert Into #Tab(Table_Name, Total_Records) SELECT ''?'', COUNT(*) FROM ?'  
SELECT * FROM #Tab t ORDER BY t.Total_Records DESC;  
DROP TABLE #Tab;

Résultat :

2016-12-19_22h47_22

Requête 4 – Liste des procédures stockées modifiées dans les N derniers jours
SELECT name,modify_date  
FROM sys.objects  
WHERE type='P'  
AND DATEDIFF(D,modify_date,GETDATE())< 100

Résultat :

2016-12-19_12h09_14

Requête 5 – Obtenir toutes les tables qui n’ont pas de clé primaire
SELECT name AS Table_Name  
FROM sys.tables  
WHERE OBJECTPROPERTY(OBJECT_ID,'TableHasPrimaryKey') = 0  
ORDER BY Table_Name;

Résultat :

2016-12-19_22h56_29

Requête 6 – Obtenir des informations sur les colonnes des tables
SELECT * FROM INFORMATION_SCHEMA.COLUMNS  
WHERE INFORMATION_SCHEMA.COLUMNS.TABLE_NAME='FactFacture'

Résultat :

2016-12-19_23h00_38

Requête 7 – Afficher le contenu d’une procédure stockée
exec sp_helptext @objname = 'getScoringPerfPCID'  /*Prod stock Name*/

Résultat :

2016-12-20_09h52_16

Requête 8 – Liste des procédures stockées associées à une table
SELECT DISTINCT o.name, o.xtype 
FROM syscomments c 
INNER JOIN sysobjects o ON c.id=o.id 
WHERE c.TEXT LIKE '%FactPricingOverview%' /*Table Name*/ AND o.xtype='P'

Résultat :

2016-12-20_09h54_04

Requête 9 – Liste des clés primaires et des clés étrangères d’une base de donnée
SELECT  
    DISTINCT  
    Constraint_Name AS [Constraint],   
    Table_Schema AS [Schema],  
    Table_Name AS [TableName] FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE   
    GO

Résultat :

2016-12-19_23h35_32

Requête 10 – Désactiver toutes les contraintes d’une table
ALTER TABLE Table_Name NOCHECK CONSTRAINT ALL

 

 

Leave a comment

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.