Bonjour tous,

J'ai besoin de vos lumières

Je suis en train de créer une requête qui fait des contrôles de nommage de table sur chaque base de données. Ex:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
IF DB_NAME() LIKE 'Source%'
BEGIN
SELECT
	CASE
		WHEN TABLE_NAME LIKE 'zzz%' THEN 'A supprimer'
		WHEN TABLE_NAME LIKE 'TD_%' THEN 'Table de dimension'
		WHEN TABLE_NAME LIKE 'TF_%' THEN 'Table de faits'
		WHEN TABLE_NAME LIKE 'CDE_%' THEN 'Tables d’enrichissement ' ELSE 'Pas de règles de nommage pour les bases Source_%'
	END AS TABLE_TYPE,
	DB_NAME() AS DATABASE_NAME,
	TABLE_NAME,
	CASE
		WHEN TABLE_NAME LIKE 'zzz%' THEN 1 ELSE 0
	END AS CONTROL_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
END
IF DB_NAME() LIKE 'Prochain type de base....'
BEGIN
Requête
END
etc. etc.
Ma requête marche nickel quand je la lance avec un USE XXX GO dans SSMS.

Cependant je veux industrialiser ce truc en utilisant la procédure stockée master.sys.SP_MSforeachDB et passer ma requête en tant que variable pour le SQL dynamique.

Seul souci : le type de données de variable pour la procédure stockée et limité (NVARCHAR(4000)) je pense. Et ma requête fait plus de 5000

J'ai tenté de recréer la PS avec des variables NVARCHAR(MAX) mais ça marche pas puisqu'il appelle d'autres PS de façon imbriquée....

Any ideas?!