IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo

SQL Server - La FAQConsultez toutes les FAQ

Nombre d'auteurs : 13, nombre de questions : 119, dernière mise à jour : 31 mai 2011  Ajouter une question

 

Question / réponses à tout ce que vous avez toujours voulu savoir sur Microsoft SQL Server sans jamais oser le demander

SommaireConsulter les informations de schéma (24)
sommaire suivant
 

Vous avez beaucoups de possibilités pour connaître la liste des tables d'une base de données. Nous vous recommandons d'utiliser les vues d'informations de schéma.

Code sql : Sélectionner tout
1
2
3
SELECT table_name 
FROM information_schema.tables 
WHERE table_type='BASE TABLE'
Vous pouvez aussi passer par la procedure stockée sp_tables ou encore passez par les tables systèmes.

Code sql : Sélectionner tout
SELECT name FROM sysobjects WHERE type='U'

Mis à jour le 28 septembre 2005 Fabien Celaia WOLO Laurent

Comme pour la liste des bases de données d'un serveur, SQL Server offre trois possibilités 1-La consultation des vues d'informations de schema

Code tsql : Sélectionner tout
1
2
3
SELECT   COLUMN_NAME, ORDINAL_POSITION 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME='MA_TABLE'
2-L'utilisation de la procédure stockée sp_columns

Code tsql : Sélectionner tout
EXEC sp_columns 'Nom_de_table'
3-L'utilisation des tables systèmes.

Code tsql : Sélectionner tout
1
2
3
4
5
6
7
8
9
SELECT c.colid, c.name Colonne, 
       t.name Type, 
       CAST(c.prec as varchar(10)) + 
           CASE WHEN c.scale > 0 THEN ',' + CAST(c.scale as varchar(10) )  
                         ELSE ''  
END Taille 
 FROM syscolumns c INNER JOIN systypes t ON t.usertype=c.usertype 
WHERE c.id=object_id('VotreTable') 
ORDER BY c.colid
4-L'utilisation de la procédure stockée sp_help

Code tsql : Sélectionner tout
EXEC sp_help NomTable

Mis à jour le 28 septembre 2005 Fabien Celaia WOLO Laurent

La liste des vues d'une base de données de SQL-Server est accessible grâce à une requête
sur les tables systèmes : sysobjects, syscomments et sysusers.

Code : Sélectionner tout
1
2
3
SELECT name  
  FROM sysobjects  
 WHERE type='V'
Mais il est recommandé d'utiliser les vues d'informations de schemas.

Code : Sélectionner tout
1
2
SELECT *  
  FROM information_schema.views

Mis à jour le 28 septembre 2005 WOLO Laurent

La liste des fonctions définies par l'utilisateur de SQL-Server est accessible
grâce à une requête sur les tables systèmes : sysobjects, syscomments et sysusers.

Code : Sélectionner tout
1
2
3
SELECT name  
  FROM sysobjects  
 WHERE type='FN'

Mis à jour le 28 septembre 2005 WOLO Laurent

La liste des procédures stockées de SQL-Server est accessible grâce à une requête
sur les tables systèmes : sysobjects, syscomments et sysusers.

Code tsql : Sélectionner tout
1
2
3
SELECT name  
  FROM sysobjects  
 WHERE type='P'
On peut également utiliser la méthode des vues d'informations de schema

Code tsql : Sélectionner tout
1
2
SELECT *  
FROM INFORMATION_SCHEMA.ROUTINES
Ou encore, utiliser la procedure stockée : sp_stored_procedures

Mis à jour le 28 septembre 2005 WOLO Laurent

La liste des triggers de SQL-Server est accessible grâce à une requête sur les tables systèmes : sysobjects, syscomments et sysusers.

Code tsql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
SELECT  
    o.name,  o.xtype,  c.text,    u.name,   o.crdate  
FROM  
    dbo.sysobjects o  
INNER JOIN dbo.syscomments c 
    ON c.id = o.id  
INNER JOIN dbo.sysusers u 
    ON u.uid = c.uid  
WHERE  
    xtype = 'TR'

Mis à jour le 1er janvier 2006 spidetra

Il existe une procédure stockée pour celà :

Code tsql : Sélectionner tout
EXEC sp_pkeys @table_name='MaTable'

Mis à jour le 28 septembre 2005 Fabien Celaia

Code tsql : Sélectionner tout
sp_help MaTable
Ou

Code tsql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
select  
 column_name as champ,  
COALESCE(domain_name,  
cast(data_type as varchar(128))+ ISNULL(' ' + cast(character_maximum_length as varchar(10)) ,'')) as type_donnee,  
CASE UPPER(IS_NULLABLE)  
   when 'YES' then ''  
   when 'NO' then 'Oui'  
   when Null then ''  
   else  IS_NULLABLE  
END as Obligatoire,  
'' as description  
from INFORMATION_SCHEMA.columns  
where  
 table_name  = 'Matable'  
order by table_name, ordinal_position

Mis à jour le 28 septembre 2005 WOLO Laurent

Code tsql : Sélectionner tout
1
2
3
4
select cdefault 
from syscolumns 
where id = object_id('VotreTable') 
and name = 'VotreColonne'

Mis à jour le 3 mai 2006 Fabien Celaia

Code tsql : Sélectionner tout
1
2
3
4
Select O.Name as Table_Name, I.Rows as Rows_Count 
FROM sysobjects O join sysindexes I 
          ON O.id=I.id 
Where O.xtype='U'

Mis à jour le 3 mai 2006 WOLO Laurent

Pour connaître le nom de la base de donnée en cours, vous pouvez utiliser la fonction DB_NAME().

Code sql : Sélectionner tout
SELECT  DB_NAME() AS BASE_DE_DONNEES_EN_COURS

Mis à jour le 28 septembre 2005 Fabien Celaia WOLO Laurent

Vous avez trois méthodes au choix: 1- L'utilisation des vues d'informations de schema, Exemple :

Code sql : Sélectionner tout
1
2
3
SELECT CATALOG_NAME  
FROM INFORMATION_SCHEMA.SCHEMATA 
Go
2-La consultation des tables systemes bien que non recommandée pour des raisons de portabilité Exemple:

Code sql : Sélectionner tout
1
2
3
4
5
USE master 
Go 
SELECT name as BaseDedonneeDuServeur 
FROM sysdatabases 
Go
3-L'utilisation de la procedure stockée sp_databases Exemple:

Code sql : Sélectionner tout
1
2
EXEC sp_databases 
go

Mis à jour le 28 septembre 2005 WOLO Laurent

Pour changer le type de données d'une colonne, MS SQL Serveur fournit la clause
Alter Column
Exemple ferait l'affaire:

Code tsql : Sélectionner tout
1
2
ALTER TABLE MyTable  
ALTER COLUMN MyColumn NVARCHAR(20) NOT NULL
Vous pouvez également proceder comme ceci:

  • Demmarrer une transaction sérialisée;
  • Créer une nouvelle table avec le nouveau type de données telle que souhaitée;
  • Importer les données de l'ancienne table vers la nouvelle;
  • Supprimer l'ancienne table;
  • Renommer la nouvelle table avec l'ancien nom;

Exemple :

Code tsql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
--Supposons que nous ayant une table T_Person dont la definition est : 
CREATE TABLE Tmp_T_PERSONNE 
( 
PER_ID int NOT NULL, 
PER_NOM varchar(50) NOT NULL, 
PER_PRENOM varchar(50) NULL, 
PER_NE_LE smalldatetime NOT NULL, 
)  ON [PRIMARY] 
GO 
--Et que nous voulons changer le type Per_Nom du type varchar(50) au type varchar(100) 
--Nous aurons : 
BEGIN TRANSACTION 
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE 
--Créer une table temporaire ayant même structure que la première 
CREATE TABLE Tmp_T_PERSONNE 
( 
PER_ID int NOT NULL, 
PER_NOM varchar(100) NOT NULL, 
PER_PRENOM varchar(50) NULL, 
PER_NE_LE smalldatetime NOT NULL, 
)  ON [PRIMARY] 
GO 
-- Peupler la table 
IF EXISTS(SELECT * FROM T_PERSONNE) 
 EXEC('INSERT INTO Tmp_T_PERSONNE (PER_ID,PER_NOM, PER_PRENOM, PER_NE_LE, PAY_ID, PER_NE_A) 
SELECT PER_ID, PER_NOM, PER_PRENOM, PER_NE_LE FROM T_PERSONNE TABLOCKX') 
GO 
--Supprimer la table 
DROP TABLE dbo.T_PERSONNE 
GO 
--Renommer la nouvelle table avec l'ancien nom 
EXECUTE sp_rename N'Tmp_T_PERSONNE', N'T_PERSONNE', 'OBJECT' 
GO 
COMMIT

Mis à jour le 28 septembre 2005 WOLO Laurent

Pour renommer une base de données, MS SQL Server fournit la procedure stockée sp_renamedb
Exemple :

Code tsql : Sélectionner tout
EXEC sp_renamedb('MyOldDB','MyNiewDB')
Vous pouvez également créer une nouvelle base de données, importez les données
par DTS de l'ancienne base de données vers la nouvelle, puis supprimer l'ancienne base de données.

Mis à jour le 28 septembre 2005 WOLO Laurent

Pour renommer un object d'une base de données, l'on peut passer par la procedure stockée sp_rename.
Voici ce que l'aide en ligne de MS SQL Serveur 2000 apporte a ce sujet:

Code tsql : Sélectionner tout
1
2
3
sp_rename [ @objname = ] 'object_name' ,  
    [ @newname = ] 'new_name'  
    [ , [ @objtype = ] 'object_type' ]
ou object_name désigne le nom de l'object à renommer,
new_name la nouvelle désignation de l'object et
et object_type l'une des valeurs du tableau ci-dessous.

Valeur Description
COLUMN Une colonne qui doit être renommée..
BASE DE DONNEES Base de données définie par l'utilisateur. Cette option est nécessaire pour renommer une base de données.
INDEX Un index défini par l'utilisateur.
OBJECT Élément d'un type repris dans sysobjects. Par exemple, OBJECT peut être utilisé pour renommer les objets dont les contraintes (CHECK, FOREIGN KEY, PRIMARY/UNIQUE KEY), des tables utilisateur, des affichages, des procédures stockées, des déclencheurs et des règles.
USERDATATYPE Type de données défini par l'utilisateur ajouté en exécutant sp_addtype.

Exemple : A1-Renommer une table Dans cet exemple la table customers est renommée custs.

Code tsql : Sélectionner tout
EXEC sp_rename 'customers', 'custs'
A2-Renommer une colonne Dans cet exemple la colonne contact title de la table customers est renommé title.

Code tsql : Sélectionner tout
EXEC sp_rename 'customers.[contact title]', 'title', 'COLUMN'

Mis à jour le 28 septembre 2005 WOLO Laurent

Pour se faire plaisir

Code tsql : Sélectionner tout
1
2
3
4
5
select text  
from dbo.syscomments, dbo.sysobjects 
where syscomments.id = sysobjects.id 
And sysobjects.xtype = 'P' 
AND sysobjects.name='MaProcédure'
mais bien plus simplement, et avec les bons retour-chariots

Code tsql : Sélectionner tout
sp_helptext 'MaProcédure'

Mis à jour le 18 juillet 2006 Fabien Celaia

Après restauration d'une sauvegarde d'une base de données SQL Serveur 2000 sur un serveur de base de données SQL Serveur 2005, vous ne pouvez pas acceder au schema de cette base de données.

SQL Serveur 2005 vous renvoie le message :

Code : Sélectionner tout
Database diagram support objects cannot be installed because this database does not have a valid owner. To continue, first use the Files page of the Database Properties dialog box or the ALTER AUTHORIZATION statement to set the database owner to a valid login, then add the database diagram support objects.
Pour résoudre ce problème, il faut

  • Changer le niveau de compatibilitéEXEC sp_dbcmptlevel 'database_name', '90';
  • Changer le propriétaire de la base de données sur le nouveau serveur

Code tsql : Sélectionner tout
ALTER AUTHORIZATION ON DATABASE::database_name TO valid_login

Mis à jour le 18 juillet 2006 WOLO Laurent

Code tsql : Sélectionner tout
1
2
3
SELECT *  
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS  
WHERE TABLE_NAME = 'matable'

Mis à jour le 9 août 2006 rudib

Code tsql : Sélectionner tout
1
2
3
4
5
6
7
SELECT DISTINCT NECESSAIRE.NAME 
FROM SYSOBJECTS AS NECESSAIRE 
INNER JOIN SYSDEPENDS AS DEPENDENCES 
ON NECESSAIRE.ID = DEPENDENCES.depid 
INNER JOIN SYSOBJECTS AS DEPENDANTE 
ON DEPENDENCES.id = DEPENDANTE.id 
WHERE DEPENDANTE.name='NOMDELAVUE'

Mis à jour le 9 août 2006 maitrebn

Soit via requêtage peu aisé dans syscolumns (exemple pour rechercher des différences de type, il faudra complexifier avec outer jin et consors pour rechercher les colonnes manquantes, de trop...)

Code tsql : Sélectionner tout
1
2
3
4
5
6
select s1.name, s1.type, s2.name, s2.type  
from syscolumns s1, syscolumns s2 
where s1.id = object_id('MaTable1') 
and s2.id = object_id('MaTable2') 
and s1.name=s2.name 
and s1.type<>s2.type
Soit via l'utilitairetablediff.exe installé par défaut avec SQL Serrver 2005 dans le répertoire COM.

Mis à jour le 8 mars 2008 Fabien Celaia SQLpro

Automatique

  • SQL Compare
  • SQL Delta
  • SQL Examiner
  • Visual Studio for DB professional
  • Apex SQLDiff
  • EMS DB Comparer for SQL Server
  • Quest

Visuel

Gratuit

Manuel
  • Script en Python ou Ruby pour générer les scripts des objets, et comparaison les deux répertoires avec un outil comme winmerge

manuel :

Script en Python ou Ruby : http://www.babaluga.com/doku.php/pro...on_python-ruby pour générer les scripts des objets, et tu compares les deux répertoires avec un outil comme winmerge"

Mis à jour le 8 mars 2008 ylarvor

Voici une procédure permettant de rechercher toutes les bases contenant une table de nom @SCH.@TAB :

Code sql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
DECLARE @SCH NVARCHAR(128), @TAB  NVARCHAR(128);  
  
SELECT @SCH = '???' , @TAB = '???';  
  
DECLARE @SQL NVARCHAR(max)  
SET @SQL = '';  
SELECT @SQL = @SQL + 'SELECT * FROM '  
       + name + '.INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ''' + COALESCE(@SCH, 'dbo') + '''  AND TABLE_NAME = ''' + @TAB +''';'  
FROM   sys.databases;  
  
EXEC (@SQL);

Mis à jour le 24 mai 2009 SQLpro

Voici un ensemble de codes SQL utilisant des procédures systèmes et l'agent SQL pour scruter le taux d'occupation des disques et remonter une alerte en cas de dépassement.

Création des objets dans la basez de données MSDB

Création des tables de suivi de l'évolution de l'espace disque et de leur taux d'occupation. Notez l'utilisation du schéma S_SYS dans msdb :

Code sql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
USE msdb;  
GO  
  
CREATE SCHEMA S_SYS  
  
CREATE TABLE T_A_DISK_DSK  
( DSK_ID        INT      NOT NULL PRIMARY KEY,  
  DSK_UNIT      CHAR(1)  NOT NULL UNIQUE CHECK (DSK_UNIT COLLATE French_CI_AS BETWEEN 'C' AND 'Z'),  
  DSK_ALERT_PC  FLOAT    NOT NULL DEFAULT 30.0 CHECK (DSK_ALERT_PC BETWEEN 0.0 AND 100.0))  
  
CREATE TABLE T_A_TRACE_SPACE_DISK_TSP  
( TSP_ID        INT      NOT NULL PRIMARY KEY,  
  DSK_UNIT      CHAR(1)  NOT NULL FOREIGN KEY REFERENCES T_A_DISK_DSK (DSK_UNIT),  
  TSP_DATETIME  DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,  
  TSP_SIZE_MO   INT      NOT NULL,  
  TSP_USED_MO   INT      NOT NULL);  
GO    
  
CREATE INDEX X_TSP_DTM ON S_SYS.T_A_TRACE_SPACE_DISK_TSP (TSP_DATETIME, DSK_UNIT);  
GO
Création de la procédure de capture des données d'espace disque

Code sql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
CREATE PROCEDURE S_SYS.P_AUDIT_SPACE_DISK  
AS  
  
SET NOCOUNT ON;  
  
DECLARE @HDL int,  
        @FSO int,  
        @HD char(1),  
        @DRV int,  
        @SZ varchar(20),  
        @MB bigint ;   
  
SET @MB = 1048576;  
  
CREATE TABLE #HD (HD_UNIT      char(1) PRIMARY KEY,  
                  HD_FREESPACE int NULL,  
                  HD_SIZE      int NULL);  
  
INSERT INTO #HD (HD_UNIT, HD_FREESPACE)   
EXEC master.dbo.xp_fixeddrives;  
  
DELETE FROM #HD  
WHERE  HD_UNIT NOT IN (SELECT DSK_UNIT   
                       FROM   S_SYS.T_A_DISK_DSK);  
  
EXEC @HDL = sp_OACreate 'Scripting.FileSystemObject',@FSO OUT;  
IF @HDL <> 0 EXEC sp_OAGetErrorInfo @FSO;  
  
DECLARE C CURSOR LOCAL FAST_FORWARD  
FOR SELECT HD_UNIT   
    FROM   #HD;  
  
OPEN C;  
  
FETCH NEXT FROM C INTO @HD;  
  
WHILE @@FETCH_STATUS=0  
BEGIN  
  
        EXEC @HDL = sp_OAMethod @FSO, 'GetDrive', @DRV OUT, @HD  
        IF @HDL <> 0 EXEC sp_OAGetErrorInfo @FSO;  
  
        EXEC @HDL = sp_OAGetProperty @DRV, 'TotalSize', @SZ OUT  
        IF @HDL <> 0 EXEC sp_OAGetErrorInfo @DRV;  
  
        UPDATE #HD  
        SET    HD_SIZE = CAST(@SZ AS FLOAT) / @MB  
        WHERE  HD_UNIT = @HD;  
  
        FETCH NEXT FROM C INTO @HD;  
  
END  
  
CLOSE C;  
DEALLOCATE C;  
  
EXEC @HDL=sp_OADestroy @FSO;  
IF @HDL <> 0 EXEC sp_OAGetErrorInfo @FSO;  
  
INSERT INTO S_SYS.T_A_TRACE_SPACE_DISK_TSP (TSP_UNIT, TSP_SIZE_MO, TSP_USED_MO)  
SELECT                                      HD_UNIT,  HD_SIZE,     HD_SIZE - HD_FREESPACE  
FROM   #HD  
  
DROP TABLE #HD;  
  
RETURN;  
GO
Mise en place dans l'agent SQL Server serveur d'une routine journalière de scrutation à 5h du matin

Code sql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
USE [msdb]  
GO  
  
EXEC msdb.dbo.sp_add_job   
   @job_name=N'Scrutation espace disque',   
   @enabled=1,   
   @notify_level_eventlog=0,   
   @notify_level_email=2,   
   @notify_level_netsend=2,   
   @notify_level_page=2,   
   @delete_level=0,   
   @category_name=N'Data Collector',   
   @owner_login_name=N'SA';  
  
EXEC msdb.dbo.sp_add_jobserver   
   @job_name=N'Scrutation espace disque',   
   @server_name = N'ServerSQL[\instance]';  
  
EXEC msdb.dbo.sp_add_jobstep   
   @job_name=N'Scrutation espace disque',   
   @step_name=N'Rapporte l''état du volume du disque',   
   @step_id=1,   
   @cmdexec_success_code=0,   
   @on_success_action=1,   
   @on_fail_action=2,   
   @retry_attempts=0,   
   @retry_interval=0,   
   @os_run_priority=0,   
   @subsystem=N'TSQL',   
   @command=N'EXEC S_SYS.P_AUDIT_SPACE_DISK;',   
   @database_name=N'msdb',   
   @flags=0;  
  
EXEC msdb.dbo.sp_update_job   
   @job_name=N'Scrutation espace disque',   
   @enabled=1,   
   @start_step_id=1,   
   @notify_level_eventlog=0,   
   @notify_level_email=2,   
   @notify_level_netsend=2,   
   @notify_level_page=2,   
   @delete_level=0,   
   @description=N'',   
   @category_name=N'Data Collector',   
   @owner_login_name=N'ServerSQL[\instance]',   
   @notify_email_operator_name=N'',   
   @notify_netsend_operator_name=N'',   
   @notify_page_operator_name=N'';  
  
EXEC msdb.dbo.sp_add_jobschedule  
   @job_name=N'Scrutation espace disque',   
   @name=N'Planification espace disque',   
   @enabled=1,   
   @freq_type=4,   
   @freq_interval=1,   
   @freq_subday_type=1,   
   @freq_subday_interval=0,   
   @freq_relative_interval=0,   
   @freq_recurrence_factor=1,   
   @active_start_date=20090312,   
   @active_end_date=99991231,   
   @active_start_time=50000,   
   @active_end_time=235959;  
GO
Vous devez remplacer "ServerSQL[\instance]" par le nom de votre serveur et SA par le compte de connexion sous lequel cette routine doit tourner.

Création d'un déclencheur pour envoi par mail d'une alerte immédiate

Code sql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
-- trigger pour envoi d'un mail  
CREATE TRIGGER E_I_TSP  
ON S_SYS.T_A_TRACE_SPACE_DISK_TSP  
FOR INSERT  
AS  
BEGIN  
   IF EXISTS(SELECT *  
             FROM   inserted AS i  
                    INNER JOIN S_SYS.T_A_DISK_DSK AS D  
                          ON i.DSK_UNIT = D.DSK_UNIT  
             WHERE  (CAST(TSP_USED_MO AS FLOAT) / CAST(TSP_SIZE_MO AS FLOAT) ) * 100 > DSK_ALERT_PC  
      master..sp_send_dbmail @profile_name = 'profile_name',  
                             @recipients = 'mail_destinataire1;mail_destinataire2;mail_destinataire3;...',  
                             @subject = 'Alerte automatique : quota d''espace libre de disque en dessous de la valeur fixée',   
                             @body = 'Au moins un des disques que vous suivez via la procédure cyclique  
S_SYS.P_AUDIT_SPACE_DISK a atteint un quota d''espace disque inférieur au seuil d''alerte fixé.',  
                             @body_format = 'TEXT',  
                             @importance = 'High',  
                             @query = 'SELECT D.DSK_UNIT AS UNITE, TSP_SIZE_MO AS TAILLE_MO, TSP_USED_MO AS ESPACE_UTILISE_MO,   
       (CAST(TSP_USED_MO AS FLOAT) / CAST(TSP_SIZE_MO AS FLOAT) ) * 100 AS OCCUPATION_POURCENT,  
       DSK_ALERT_PC AS TAUX_ALERTE_POURCENT,  
       CASE   
          WHEN (CAST(TSP_USED_MO AS FLOAT) / CAST(TSP_SIZE_MO AS FLOAT) ) * 100 > DSK_ALERT_PC 
          THEN ''CRITIQUE !''  
          ELSE ''normal''   
       END AS ETAT     
FROM   S_SYS.T_A_TRACE_SPACE_DISK_TSP AS T  
       INNER JOIN S_SYS.T_A_DISK_DSK AS D  
             ON T.DSK_UNIT = D.DSK_UNIT  
WHERE  TSP_DATETIME = (SELECT MAX(TSP_DATETIME)  
                       FROM   S_SYS.T_A_TRACE_SPACE_DISK_TSP)  
ORDER  BY 1 ',  
                             @execute_query_database =  'msdb',  
                             @attach_query_result_as_file = 0,  
                             @query_result_header = 1;  
END  
GO
Dans ce code, vous devez spécifier l'un des profil mail que vous avez mis en place lors de l'activation de db_mail à la place de "profile_name" de même vous devez spécifier les emails des destinataires à la place de "mail_destinataire1;mail_destinataire2;mail_destinataire3;..."

Exemple

Alimentons la table des disques avec nos disques :

Code sql : Sélectionner tout
1
2
INSERT INTO S_SYS.T_A_DISK_DSK VALUES ('C', 70);  
INSERT INTO S_SYS.T_A_DISK_DSK VALUES ('D', 50);
Nous surveillons deux disques C et D et voulons êtres alertés lorsque C dépasse un taux d'occupation de 70% et lorsque D dépasse un taux d'occupation de 50%.

Mis à jour le 24 mai 2009 SQLpro

Les informations sur les diagrammes sont stockées dans la table dtproperties dans chaque base de données. Voici une procédure pour transférer les diagrammes d'une base de données vers une autre :

1-Faire un click droit sur la base qui contient le schéma a transférer, cliquez sur « Toutes les tâches » puis sur « Exporter des données »
2-Configurez la source puis cliquez sur le bouton Suivant.
3-Configurez la base de destination et cliquez sur le bouton Suivant
4-Dans l'ecran « Spécifier Copie ou Interrogation de Table », Cliquez sur « Utilisez une requête pour spécifier les données a transférer », puis cliquez sur Suivant.
5-Dans l'ecran « Saisie de l?instruction SQL », tapez la requete suivante : « Select * From dtproperties », puis cliquez sur Suivant.
6-Dans l'ecran « Sélectionner les tables et les vues sources », choisissez la table dtproperties dans la colonne destination puis cliquez sur Suivant.
7-l'ecran « Enregistrer, planifier et dupliquer le lot », choisissez « Exécuter immédiatement », puis cliquez sur Suivant et enfin cliquez sur Terminer.

Mis à jour le 13 février 2010 topolino

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.