Académique Documents
Professionnel Documents
Culture Documents
Question / rponses tout ce que vous avez toujours voulu savoir sur Microsoft SQL Server sans jamais oser le demander
Fabien Celaia - Morsi - Wolo Laurent - Rudi Bruchez Maitrebn - devdev - drahu - HULK - spidetra - Frdric Brouard - davidou2001 - Ylarvor - elsuket - maitrebn -
1. Consulter les informations de schma (23) ...............................................................................................................................4 2. Consulter la taille des objects de la base de donnes (4) ....................................................................................................... 17 3. Administration de la base de donnes (39) .............................................................................................................................19 3.1. Editions de SQL Serveur (5) ..........................................................................................................................................20 3.2. Utilisateurs et connexions (11) .......................................................................................................................................22 3.3. Connexions au serveur (10) ............................................................................................................................................28 3.4. Performances (2) .............................................................................................................................................................31 3.5. Sauvegardes et restauration (11) .................................................................................................................................... 34 4. Trucs et Astuces en T-SQL (44) .............................................................................................................................................39 4.1. Fonctions (11) ................................................................................................................................................................. 40 4.2. Limiter le jeu de rsultat (14) ........................................................................................................................................ 46 4.3. Validation des donnes (5) .............................................................................................................................................65 4.4. Programmation des bases de donnes (11) .................................................................................................................... 69 4.5. Champs auto-incrments (3) .........................................................................................................................................75 5. Utilisation des utilitaires (7) ....................................................................................................................................................76
-3Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Sommaire > Consulter les informations de schma Comment obtenir la liste des tables d'une base de donne ?
Auteurs : Wolo Laurent , Fabien Celaia , Vous avez beaucoups de possibilits pour connatre la liste des tables d'une base de donnes. Nous vous recommandons d'utiliser les vues d'informations de schma.
Vous pouvez aussi passer par la procedure stocke sp_tables ou encore passez par les tables systmes.
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
-4Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Comment lister l'ensemble des vues d'une base de donnes SQL Server ?
Auteurs : Wolo Laurent , La liste des vues d'une base de donnes de SQL-Server est accessible grce une requte sur les tables systmes : sysobjects, syscomments et sysusers.
Comment lister l'ensemble des UDF d'une base de donnes SQL Server ?
Auteurs : Wolo Laurent , La liste des fonctions dfinies par l'utilisateur de SQL-Server est accessible grce une requte sur les tables systmes : sysobjects, syscomments et sysusers.
Comment lister l'ensemble des procdures stockes d'une base de donnes SQL Server ?
Auteurs : Wolo Laurent , La liste des procdures stockes de SQL-Server est accessible grce une requte sur les tables systmes : sysobjects, syscomments et sysusers.
-5Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Comment lister l'ensemble des dclencheurs d'une base de donnes SQL Server ?
Auteurs : spidetra , La liste des triggers de SQL-Server est accessible grce une requte sur les tables systmes : sysobjects, syscomments et sysusers.
SELECT o.name, o.xtype, c.text, 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'
u.name,
o.crdate
Quelle est la requte qui permet de savoir quelles colonnes d'une table servent de cl primaire ?
Auteurs : Fabien Celaia , Il existe une procdure stocke pour cel :
Ou
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'
-6Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Quel est le nombre de ligne de chacune des tables d'une base de donnes ?
Auteurs : Wolo Laurent ,
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'
2-La consultation des tables systemes bien que non recommande pour des raisons de portabilit Exemple: TABLES SYSTEMES
USE master Go SELECT name as BaseDedonneeDuServeur FROM sysdatabases Go
-7Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Vous pouvez galement proceder comme ceci: Demmarrer une transaction srialise; Crer une nouvelle table avec le nouveau type de donnes telle que souhaite; Importer les donnes de l'ancienne table vers la nouvelle; Supprimer l'ancienne table; Renommer la nouvelle table avec l'ancien nom;
Exemple :
--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 --Crer une table temporaire ayant mme structure que la premire 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
-8Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
GO --Renommer la nouvelle table avec l'ancien nom EXECUTE sp_rename N'Tmp_T_PERSONNE', N'T_PERSONNE', 'OBJECT' GO COMMIT
EXEC sp_renamedb('MyOldDB','MyNiewDB')
Vous pouvez galement crer une nouvelle base de donnes, importez les donnes par DTS de l'ancienne base de donnes vers la nouvelle, puis supprimer l'ancienne base de donnes.
ou object_name dsigne le nom de l'object renommer, new_name la nouvelle dsignation de l'object et et object_type l'une des valeurs du tableau ci-dessous. Valeur COLUMN BASE DE DONNEES INDEX OBJECT Description Une colonne qui doit tre renomme.. Base de donnes dfinie par l'utilisateur. Cette option est ncessaire pour renommer une base de donnes. Un index dfini par l'utilisateur. lment 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 procdures stockes, des dclencheurs et des rgles. Type de donnes dfini par l'utilisateur ajout en excutant sp_addtype.
USERDATATYPE
Exemple : A1-Renommer une table Dans cet exemple la table customers est renomme custs.
-9Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
A2-Renommer une colonne Dans cet exemple la colonne contact title de la table customers est renomm title.
select text from dbo.syscomments, dbo.sysobjects where syscomments.id = sysobjects.id And sysobjects.xtype = 'P' AND sysobjects.name='MaProcdure'
sp_helptext 'MaProcdure'
Comment rcuperer un schma de base de donnes sur un serveur SQL2005 depuis une restauration d'une base de donnes en version 2000 ?
Auteurs : Wolo Laurent , Aprs restauration d'une sauvegarde d'une base de donnes SQL Serveur 2000 sur un serveur de base de donnes SQL Serveur 2005, vous ne pouvez pas acceder au schema de cette base de donnes. SQL Serveur 2005 vous renvoie le message :
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 rsoudre ce problme, il faut Changer le niveau de compatibilit EXEC sp_dbcmptlevel 'database_name', '90'; Changer le propritaire de la base de donnes sur le nouveau serveur
Comment lister les contraintes de cls primaires et trangres des tables d'une base de donnes ?
Auteurs : Rudi Bruchez ,
SELECT *
- 10 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
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'utilitaire tablediff.exe install par dfaut avec SQL Serrver 2005 dans le rpertoire COM.
Sybase PowerAMC
- 11 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Manuel
Script en Python ou Ruby pour gnrer les scripts des objets, et comparaison les deux rpertoires avec un outil comme winmerge
manuel : Script en Python ou Ruby : http://www.babaluga.com/doku.php/pro...on_python-ruby pour gnrer les scripts des objets, et tu compares les deux rpertoires avec un outil comme winmerge"
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);
- 12 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
- 13 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
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 journalire de scrutation 5h du matin
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,
- 14 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
@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.
Cration d'un dclencheur pour envoi par mail d'une alerte immdiate
-- 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 fixe', @body = 'Au moins un des disques que vous suivez via la procdure cyclique S_SYS.P_AUDIT_SPACE_DISK a atteint un quota d''espace disque infrieur 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
- 15 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Dans ce code, vous devez spcifier l'un des profil mail que vous avez mis en place lors de l'activation de db_mail la place de "profile_name" de mme vous devez spcifier les emails des destinataires la place de "mail_destinataire1;mail_destinataire2;mail_destinataire3;..."
Nous surveillons deux disques C et D et voulons tres alerts lorsque C dpasse un taux d'occupation de 70% et lorsque D dpasse un taux d'occupation de 50%.
- 16 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Sommaire > Consulter la taille des objects de la base de donnes Comment connatre la taille occupe par une base de donnes ?
Auteurs : Wolo Laurent , Pour connattre la taille des objects d'une base de donnes, Ms SQL Server met votre disposition une procedure stocke:
O objname est le nom de la table dont on veut calculer la taille et updateusage un varchar(5) qui peut prendre 2 valeurs (false,true). updateusage, fix true permet MS SQL Serveur de recalculer la taille des pages de donnes. Ainsi, pour connattre la taille d'une base de donnes, on utilise la procedure sans indiquer le nom de l'object. Exemple : Pour connattre la taille de la base de donne DB_ESSAI, on :
Comment connatre la taille occupe par une table d'une base de donnes.
Auteurs : Wolo Laurent , Microsoft SQL server met votre disposition une procdure stocke sp_spaceused pour dterminer la taille d'une base de donnes et des tables de la base de donnes. Exemple: A. Informations sur l'espace occup par une table Cet exemple prsente la quantit d'espace allou (rserv) la table titles, l'espace utilis par les donnes, l'espace utilis par le ou les index et l'espace inutilis rserv par les objets de base de donnes.
B. Informations sur l'espace mis jour occup par toute une base de donnes Cet exemple rcapitule l'espace utilis dans la base de donnes courante et utilise le paramtre facultatif @updateusage.
USE pubs
- 17 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Comment connatre l'espace occup par les index d'une base de donnes ou d'une table ?
Auteurs : Wolo Laurent ,
USE db_essai EXEC sp_spaceused 'mon_objet'
Comment connatre la taille des fichiers mdf et ldf d'une base de donnes ?
Auteurs : Wolo Laurent , Fabien Celaia ,
use myDB GO SELECT 8 * SUM(CONVERT(DEC(15),SIZE)) as Taillemdf FROM dbo.sysfiles WHERE (status64 = 0) GO
Le rsultat est donn en Ko. En fait, vous avez le rsultat en nombre de page de donnes de 8Ko.
- 18 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
- 19 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Sommaire > Administration de la base de donnes > Editions de SQL Serveur Combien d'ditions existe-t-il pour MS SQL Server 2000 ?
Auteurs : Wolo Laurent , Editions Edition Professionnelle et Edition standard Systmes d'exploitations compatibles Windows 2003 Server Windows 2000 Server Windows 2000 DataCenter Windows 2000 Avanced Server Windows NT 4.0 Server Professional Edition Windows NT 4.0 Server Windows XP Professionelle Windows 2003 Server Windows 2000 Server Windows 2000 DataCenter Windows 2000 Avanced Server Windows 2000 Professionelle Windows NT 4.0 Server Professional Edition Windows NT 4.0 Server Windows NT 4.0 Server WorkStation Windows 98 Windows XP Professionelle Windows 2003 Server Windows 2000 Server Windows 2000 DataCenter Windows 2000 Avanced Server Windows 2000 Professionelle Windows NT 4.0 Server Professional Edition Windows NT 4.0 Server Windows NT 4.0 Server WorkStation Windows CE
Edition Personnelle
Edition Dvloppeur
Edition Windows CE
Pour les dtails : Comparaison des fonctionnalits dans SQL Server 2005
- 20 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
SQL Server 2008 Standard SQL Server 2008 Workgroup SQL Server 2008 Web SQL Server 2008 Developer SQL Server 2008 Express (gratuite) SQL Server 2008 Compact 3.5 (gratuite) fonctionalits lies aux ditions
- 21 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Sommaire > Administration de la base de donnes > Utilisateurs et connexions Comment connatre le nom de l'utilisateur connect au serveur?
Auteurs : Wolo Laurent , SQL Serveur fournit quatre fonctions permettants de connatre l'utilisateur connect au serveur pour la session en cours. Exemple:
DECLARE @usr char(30) SET @usr = user SELECT 'L''utilisateur courant GO --Ou SELECT 'L''utilisateur courant GO --Ou encore SELECT 'L''utilisateur courant GO --Nous n'allons pas oublier la SELECT 'L''utilisateur courant
ou
- 22 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
- 23 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
/* Nombre d'utilisateurs */ select @i=count(spid) from master..sysprocesses where dbid = db_id(@db) and status <> 'BACKGROUND' if @i = 0 begin print '' print 'Cette base est inutilise' print '' end else begin /* Liste des utilisateurs */ declare @snum varchar(4) select @snum = convert(varchar(4), @i) print '' print @snum+' utilisateur(s) trouvs dans la base '+@db+', serveur '+ @@servername print '' select spid, loginame Utilisateur , cmd, program_name from master..sysprocesses where dbid = db_id(@db) and status <> 'BACKGROUND' /* Message informationel pour l'utilisateur courant */ if exists (select * from master..sysprocesses where spid=@@spid and dbid=db_id(@db)) begin print '' print 'FYI : VOUS tes actuellement connects la base '+@db+', serveur '+@@servername print '' end end return @i end go GRANT execute on sp__dbuser to public go
if not exists (select * from sysusers where name = @login) begin PRINT 'L''utilisateur '+@login+'n''existe pas dans la base '+db_name()+' du serveur '+@@servername return -1 end if not exists (select * from master..syslogins where name = @login) begin /* Login inexistant => cration */ select 'exec sp_addlogin '+ @login+ ', MotDePasse' end SELECT 'EXEC SP_DROPUSER '+@login
- 24 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
SELECT 'EXEC SP_ADDUSER '+@login+', '+ @login /* membres de groupes */ select 'GRANT ROLE '+ g.name +' TO '''+u.name+'''' from sysmembers m inner join sysusers u on m.memberuid = u.uid inner join sysusers g on m.groupuid=g.uid where u.uid > 2 and u.name = @login
/*Droits*/ select case p.protecttype when 206 then 'REVOKE' else 'GRANT ' end + case p.action when 26 then 'REFERENCES' when 178 then 'CREATE FUNCTION' when 193 then 'SELECT' when 195 then 'INSERT' when 196 then 'DELETE' when 197 then 'UPDATE' when 198 then 'CREATE TABLE' when 203 then 'CREATE DATABASE' when 207 then 'CREATE VIEW' when 222 then 'CREATE PROCEDURE' when 224 then 'EXECUTE' when 228 then 'BACKUP DATABASE' when 233 then 'CREATE DEFAULT' when 235 then 'BACKUP LOG' when 236 then 'CREATE RULE' end + ' ON ' + o.name + case when p.action < 200 then case when p.protecttype = 206 then ' FROM ' else ' TO ' END +u.name else '' end + case when p.protecttype = 204 then ' WITH GRANT OPTION' else '' end from sysprotects p inner join sysusers u on u.uid=p.uid inner join sysobjects o on o.id=p.id where p.columns = 0x01 OR p.columns is null and u.name = @login order by o.name end
- 25 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
*/ set nocount on declare @i int if @db is null select @db=db_name() else if not exists(select name from master..sysdatabases where name = @db) begin Print 'La base '+@db+' n''existe pas sur le serveur SQL '+@@servername return -1 end select @db 'Base de donnes' print '' /* Number of users */ select @i=count(spid)
if @i = 0 begin print '' print 'Cette base est actuellement inutilise' print '' end else begin /* List of the users */ declare @snum varchar(4) select @snum = convert(varchar(4), @i) print '' print @snum+' utilisateurs(s) actifs dans la base '+@db+' du serveur '+ @@servername print '' select spid, nt_username Utilisateur , cmd, program_name Programme from master..sysprocesses where dbid = db_id(@db) and status <> 'background' /* Informational warning if the current user is in the database */ if exists (select * from master..sysprocesses where spid=@@spid and dbid=db_id(@db)) begin print '' print 'FYI: VOUS tes actuellement connects sur la base '+@db+' du serveur '+ @@servername print '' end end return @i end
select password, name into old_login from master..sysxlogins exec sp_password NULL, NouveauMotDePasse, MonLogin
2) Revenir l'ancien
- 26 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
update master..sysxlogins set password=O.password from old_login O, sysxlogins L where L.name=O.name and O.name='MonUtilisateur' drop table old_login exec sp_configure updates,0
lien :
En terme de choix, on ne peut spcifier que l'authentification Windows (1) ou l'authentification mixte (1 + 2).
- 27 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Sommaire > Administration de la base de donnes > Connexions au serveur Comment fixer la dure d'attente de libration d'un verrou sur un object de la base de donnes ?
Auteurs : Wolo Laurent , SET LOCK_TIMEOUT permet une application de dfinir le dlai maximal pendant lequel une instruction doit attendre en cas de ressource bloque. Si l'attente d'une instruction dpasse la valeur du paramtre LOCK_TIMEOUT, l'instruction bloque est automatiquement annule, et un message d'erreur renvoy l'application. Cette valeur est fixe -1 au dbut d'une connexion.
Je n'arrive pas me connecter une base de donnes de mon serveur depuis un programme client
Auteurs : Wolo Laurent , Si vous n'arrivez pas vous connecter une base de donnes de votre serveur, procedez comme ci-dessous. Si vous utilisez le nom de la machine comme source de donnes, vrifiez que votre rseau possde un serveur de nom de domaine. Dans le cas contraire, utilisez l'adresse IP publique de votre serveur de base de donnes. Attention, il arrive que vous vous connectez sous windows avec un utilisateur qu possde moins de droits pour modifier les donnes de la base de donnes de ce serveur. Vrifiez que vous utilisez le bon type d'autentification SQL Serveur pour votre chane de connexion Vrifiez que votre serveur ne se trouve pas derrire un serveur proxy. Vrifier que votre serveur ne se trouve pas derrire un Firewall.
- 28 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
il est dconseill d'ouvrir une brche dans le firewall si MS-SQL utilise le port par dfaut. reconfigurer le port avant tout.
Mon serveur ne dmarre pas cause du mssage : Echec d'ouverture d'une session a empch le dmarrage d'un service.
Auteurs : Wolo Laurent , Ce mssage intervient lorsque le compte configur pour dmarrer le service MSSQLSERVER choue dans le dmarrage d'une session Windows. Allez-y dans le Gestionnaire des Services, Cliquez sur le service MSSQLSERVER, puis changer le compte de dmarrage du service. NB: Il est plus simple d'utiliser le compte LocalSystem.
Comment resoudre le problme "Dlai d'attente expir" lorsqu'on tente de se connecter au serveur ?
Auteurs : Wolo Laurent , Il s'agit d'un problme li au DNS Utiliser l'adresse IP\Instance du serveur la place de NomServeur\Instance Dans la fentre de configuration IP du protocole TCP/IP de votre carte rseau, ajouter l'adresse du DNS primaire, en utilisant celui de votre contleur de domaine.
- 29 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
CREATE PROC sp_killuser (@MaBase varchar(30)=NULL) AS BEGIN Declare @SQL_Text nvarchar(20) declare Process_cur CURSOR FOR select convert(varchar(5), spid) from master..sysprocesses where dbid = db_id(coalesce(@MaBase,db_name()) and spid <> @@spid Declare @spid as varchar(4) OPEN Process_cur FETCH NEXT FROM Process_cur INTO @spid WHILE (@@FETCH_STATUS = 0) begin set @SQL_Text = 'KILL '+ @spid exec sp_executesql @T FETCH NEXT FROM Process_cur into end CLOSE Process_cur DEALLOCATE Process_cur END GO
@spid;
- 30 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Sommaire > Administration de la base de donnes > Performances Comment rindexer une base ?
Auteurs : HULK , La gestion des index par SQL Server peut entraner la fragmentation de ceux-ci et une dgradation des performances. Si le volume d'informations de votre base volue beaucoup, il est ncessaire de rindexer votre base. Plus votre base change, plus les index perdent en efficacit, il faut donc les recrer. On peut reconstruire les index avec la commande DBCC REINDEX.
CREATE PROCEDURE REINDEXATION AS DECLARE @table_name sysname DECLARE @TSQL nvarchar(4000) DECLARE @Err int DECLARE @Mess varchar(400) SET @Mess = 'Dbut rindexation' RAISERROR(@Mess, 10, 1) WITH LOG DECLARE table_list CURSOR FAST_FORWARD FOR SELECT name FROM sysobjects WHERE type = 'u' OPEN table_list FETCH NEXT FROM table_list INTO @table_name WHILE @@fetch_status = 0 BEGIN SET @TSQL = N'DBCC DBREINDEX(' + @table_name + N')' EXECUTE sp_executesql @TSQL SET @Err = @@error IF (@Err != 0) BEGIN SET @Mess = 'Echec rindexation table ' + @table_name + ' suite erreur ' + CONVERT(varchar, @Err) RAISERROR(@Mess, 16, 1) WITH LOG END FETCH NEXT FROM table_list INTO @table_name END CLOSE table_list DEALLOCATE table_list SET @Mess = 'Fin rindexation' RAISERROR(@Mess, 10, 1) WITH LOG GO
- 31 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Ces cas sont rares mais intressants : le cas de la VLDB ayant essentiellement de trs grosse table ; le cas de tempdb si l'on a pens la rpartir sur autant de gros fichier qu'il y a de CPU.
Pour ce faire, il faut utiliser le drapeau de trace 1118. Voici un petit script qui montre l'effet de la mise en place de ce paramtrage :
CREATE DATABASE DB_TEST_EXTENT; GO USE DB_TEST_EXTENT; GO CREATE TABLE dbo.T_LONGUE_LIGNE_1_LGL (LGL_ID int identity, LGL_DATA char(8000) default 'blabla'); GO WHILE NOT EXISTS(SELECT * FROM dbo.T_LONGUE_LIGNE_1_LGL WHERE LGL_ID = 8) INSERT INTO dbo.T_LONGUE_LIGNE_1_LGL DEFAULT VALUES; GO DBCC TRACEON(1118); GO CREATE TABLE dbo.T_LONGUE_LIGNE_2_LGL (LGL_ID int identity, LGL_DATA char(8000) default 'blabla'); GO WHILE NOT EXISTS(SELECT * FROM dbo.T_LONGUE_LIGNE_2_LGL WHERE LGL_ID = 8) INSERT INTO dbo.T_LONGUE_LIGNE_2_LGL DEFAULT VALUES; GO DBCC EXTENTINFO(DB_TEST_EXTENT, 'dbo.T_LONGUE_LIGNE_1_LGL', -1); DBCC EXTENTINFO(DB_TEST_EXTENT, 'dbo.T_LONGUE_LIGNE_2_LGL', -1);
Et le rsultat :
file_id page_id pg_alloc ext_size object_id index_id partition_id iam_chain_type pfs_bytes ----------- ----------- ----------- ----------- ----------- ----------1 21 1 1 2105058535 0 72057594038779904 In-row data 0x6400000000000000 1 55 1 1 2105058535 0 72057594038779904 In-row data 0x6400000000000000 1 77 1 1 2105058535 0 72057594038779904 In-row data 0x6400000000000000 1 78 1 1 2105058535 0 72057594038779904 In-row data 0x6400000000000000 1 79 1 1 2105058535 0 72057594038779904 In-row data 0x6400000000000000 1 80 1 1 2105058535 0 72057594038779904 In-row data 0x6400000000000000 1 89 1 1 2105058535 0 72057594038779904 In-row data 0x6400000000000000 1 90 1 1 2105058535 0 72057594038779904 In-row data 0x6400000000000000 partition_number
---------------- -------------------- -1 1 1 1 1 1 1 1
- 32 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
file_id page_id pg_alloc ext_size object_id index_id partition_number partition_id iam_chain_type pfs_bytes ----------- ----------- ----------- ----------- ----------- ----------- ---------------- -------------------- -1 176 8 8 2137058649 0 1 72057594038845440 In-row data 0x4444444444444444
Comme on le voit, ces deux tables contiennent les mmes donnes. L'une a donn lieu la description de 8 pages dans la mme extension, l'autre la description globale des 8 pages dans l'extension uniforme. Bien tester les effets de ce paramtrage, car le remde peut s'avrer dans certaines circonstances, pire que le mal. Rglage du paramtre En excutant :
DBCC TRACEON(1118);
Vous forcez la session en cours gnrer des extensions uniformes. Cela peut tre intressant par exemple si vous voulez insrer un lot important de lignes dans une table sans gnrer d'extensions mixtes. Par exemple lors de la cration d'une base de donnes, pour l'alimentation du rfrentiel.
DBCC TRACEON(1118, -1);
Vous forcez le moteur pour toutes les sessions venir gnrer des extensions uniforme.
DBCC TRACEOFF(1118) ; DBCC TRACEOFF(1118, -1) ;
- 33 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Sommaire > Administration de la base de donnes > Sauvegardes et restauration Comment sauvegarder une base de donnes
Auteurs : Fabien Celaia , Via la commande backup
lien :
lien :
lien :
- 34 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Comment faire un export complet d'une base ( structure avec cls, procdures etc...) y.c. des donnes qui sont dans les tables.
Auteurs : Rudi Bruchez , Il y a des outils qui gnrent le DDL des objets, et les inserts. Il y a des outils de diff de base qui sont payants (Red Gate SQL Compare et Data Compare), http://www.sqldelta.com/, http://www.sqlscriptsafe.com/, ... Il y a des outils gratuits : http://www.sqldbtools.com/ http://www.codeproject.com/cs/database/DBScriptSafe.asp http://www.codeproject.com/database/InsertGeneratorPack.asp
dont des scripts en Perl, Python et Ruby faits par votre serviteur : http://www.babaluga.com/doku.php/sql_server/code/index http://www.babaluga.com/doku.php/programmation/comparaison_python-ruby
USE VotreBase GO SELECT destination_database_name, restore_date, b.database_name, physical_name, backup_start_date FROM msdb.dbo.RestoreHistory h INNER JOIN msdb.dbo.BackupSet b ON h.backup_set_id = b.backup_set_id INNER JOIN msdb.dbo.BackupFile f ON f.backup_set_id = b.backup_set_id
- 35 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Si par contre vous avez effectu a restauration via la ligne de commande ou l'assistant interactif, ne vous restera plus qu' aller rechercher dans les journaux
Comment restaurer une base de donnes depuis des fichiers .mdb et .ldb ?
Auteurs : Fabien Celaia , Ces fichiers sont cex d'une base de donnes qui a t dtache d'un serveur par l'ordre sp_detache_db. Pour les rattacher votre serveur SQL, utilisez la procdure stocke sp_attach_db
EXEC sp_attach_db @dbname ='AdventureWorks', @filename1 = 'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_Data.mdf', @filename2 = 'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_Log.ldf'
lien : lien :
Dplacement, sauvegardes et restauration de bases sous MS-SQL Server Attacher une base de donnes dont le journal de transaction est manquant
Sauvegarder toutes les bases de donnes d'un serveur d'un seul coup
Auteurs : Frdric Brouard , Voici une procdure destine oprer une sauvegarde globales de toutes les bases d'un serveur. Diffrentes options sont possible comme de sauvegarder aussi les bases systmes ou utiliser une unit de sauvegarde (device).
CREATE PROCEDURE dbo.P_SAVE @FILE_PATH NVARCHAR(256), -- chemin pour stockage des fichiers de sauvegarde @FILE_EXT NVARCHAR(3) = 'BAK', -- extension pour les fichiers de sauvegarde @FILE_NAME NVARCHAR(128) = 'DB_SAVE', -- nom gnrique des fichiers de sauvegarde @FILE_DATE BIT = 1, -- incorporer la date dans le nom des fichiers @FILE_HOUR BIT = 1, -- incorporer l'heure dans le nom des fichiers @ONLY_USER_DB BIT = 0, -- ne sauvegarder que les bases utilisateur (pas les bases systmes) @TO_DEVICE BIT = 1, -- crer une unit de sauvegarde (device) pour y inclure toutes les sauvegardes @CLEAN_DEVICE BIT = 1 -- purger l'unit de sauvegarde (device) des sauvegrades qu'elle contient AS -- ATTENTION : les noms des bases de donnes doivent repecter la norme ISO (pas de caractres illicites) -- dans le cas contraire prvoir les crochet dans le SQL dynamique IF @FILE_PATH IS NULL OR @FILE_EXT IS NULL OR @FILE_NAME IS NULL BEGIN SET @FILE_PATH = COALESCE(@FILE_PATH, '?'); SET @FILE_EXT = COALESCE(@FILE_EXT, '?'); SET @FILE_NAME = COALESCE(@FILE_NAME, '?'); RAISERROR ('Un des paramtres de la procdure est manquant. Chemin : %s - Nom fichier : %s - Extension : %s', 16, 1) RETURN END; -- la variable @PATH se termine t-elle par un "\" ?, si non, l'ajouter IF SUBSTRING(REVERSE(@FILE_PATH), 1, 1) <> '\' SET @FILE_PATH = @FILE_PATH + '\'; -- l'extension ne doit pas avoir de point
- 36 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
-- le rpertoire doit exister. S'il n'existe pas on le cr. -- utilisation de xp_cmdshell DECLARE @SHOW_OPTIONS BIT, @CMDSHELL BIT; SELECT @SHOW_OPTIONS = CAST(value_in_use AS BIT) FROM sys.configurations WHERE name = 'show advanced options' SELECT @CMDSHELL = CAST(value_in_use AS BIT) FROM sys.configurations WHERE name = 'xp_cmdshell' IF @CMDSHELL = 0 BEGIN IF @SHOW_OPTIONS = 0 EXEC sp_configure 'show advanced options', 1; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE; IF @SHOW_OPTIONS = 0 EXEC sp_configure 'show advanced options', 0; RECONFIGURE; END -- cration du rpertoire EXEC ('xp_cmdshell ''MKDIR "' + @FILE_PATH+'"'''); IF @CMDSHELL = 0 BEGIN EXEC sp_configure 'xp_cmdshell', 0; IF @SHOW_OPTIONS = 0 EXEC sp_configure 'show advanced options', 0; RECONFIGURE; END; -- variables de travail DECLARE @DATE NVARCHAR(9), @HOUR NVARCHAR(7), @DEVICE_NAME NVARCHAR(128), @DEVICE_FILE NVARCHAR(512), @FILE_SAVE NVARCHAR(512), @SQL VARCHAR(max); -- conversion en chaine date et heure au format ISO court IF @FILE_DATE = 1 SET @DATE = REPLACE(CONVERT(NCHAR(10), CURRENT_TIMESTAMP, 121), '-', ''); IF @FILE_HOUR = 1 SET @HOUR = SUBSTRING(REPLACE(CONVERT(NCHAR(25), CURRENT_TIMESTAMP, 121), ':', ''), 12, 6); -- la sauvegarde se fait sur un device. Il faut le crer. IF @TO_DEVICE = 1 BEGIN SET @DEVICE_NAME = @FILE_NAME + COALESCE('_' + @DATE,'') + COALESCE('_' + @HOUR, ''); SET @DEVICE_FILE = @FILE_PATH + @DEVICE_NAME + '.' +@FILE_EXT; END; IF @TO_DEVICE = 1 AND @CLEAN_DEVICE = 1 -- cration d'un "device" (unit de sauvegarde) en fait un super fichier qui va contenir toutes les sauvegardes IF EXISTS (SELECT * FROM sys.backup_devices WHERE name = @DEVICE_NAME) EXEC sp_dropdevice @DEVICE_NAME; IF NOT EXISTS(SELECT * FROM sys.backup_devices WHERE name = @DEVICE_NAME) EXEC sp_addumpdevice 'DISK', @DEVICE_NAME, @DEVICE_FILE; -- gnration de la commande SQL pour la liste des bases sauvegarder SET @SQL = ''; SELECT @SQL = @SQL + 'BACKUP DATABASE ' + name +' TO ' + -- vers device ou fichiers CASE WHEN @TO_DEVICE = 1
- 37 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
THEN @DEVICE_NAME ELSE 'DISK = ''' + @FILE_PATH + @FILE_NAME + '_' + name + COALESCE('_' + @DATE,'') + COALESCE('_' + @HOUR, '') + COALESCE('.' + @FILE_EXT, '') + '''' END + -- si device alors purger ou non CASE WHEN @TO_DEVICE = 1 AND N = 1 AND @CLEAN_DEVICE = 1 THEN ' WITH FORMAT, INIT' ELSE '' END + ';' + CHAR(10) + CHAR(13) FROM (SELECT name, ROW_NUMBER() OVER(ORDER BY database_id) AS N FROM sys.databases WHERE state = 0 AND source_database_id IS NULL AND (owner_sid <> 0x01 OR @ONLY_USER_DB <> 1) AND name <> 'tempdb' ) AS T; EXEC (@SQL); GO
Exemple d'utilisation :
P_SAVE 'C:\! test sauve', 'bkp', 'SAUVEGARDE_SQL_SERVER', 1, 1, 0, 1, 0 -- @FILE_PATH @FILE_EXT @FILE_NAME @FILE_DATE @FILE_HOUR @ONLY_USER_DB @TO_DEVICE @CLEAN_DEVICE
SELECT plan_name, database_name, activity, start_time, end_time, CASE LEN(CAST(duration / 3600 AS VARCHAR(4))) WHEN 1 THEN '0' + CAST(duration / 3600 AS VARCHAR(4)) ELSE CAST(duration / 3600 AS VARCHAR(4)) END + ':' + CASE LEN(CAST(duration / 60 % 60 AS VARCHAR(2))) WHEN 1 THEN '0' + CAST(duration / 60 % 60 AS VARCHAR(2)) ELSE CAST(duration / 60 % 60 AS VARCHAR(2)) END + ':' + CASE LEN(CAST(duration % 60 AS VARCHAR(2))) WHEN 1 THEN '0' + CAST(duration % 60 AS VARCHAR(2)) ELSE CAST(duration % 60 AS VARCHAR(2)) END Dure FROM msdb.dbo.sysdbmaintplan_history WHERE succeeded = 0 -- 0 : chec | 1 : russite -- AND start_time BETWEEN '20090907' AND '20090908' ORDER BY database_name, start_time
Il est ds lors facile de placer cette requte dans un DataSet sous Reporting Services ou dans une application WinForms pour pouvoir s'afficher l'tat des plans de maintenance qui doivent avoir lieu sur une instance de SQL Server.
- 38 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
- 39 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Sommaire > Trucs et Astuces en T-SQL > Fonctions Comment manipuler le type DATE dans SQL-Server ?
Auteurs : Fabien Celaia , Toutes les fonctions sont disponibles cette addresse : Fonctions temporelles
SELECT CASE WHEN DatePart( week, @Date1 ) = DatePart( week, @Date2) THEN 1 ELSE 0 END
DECLARE @CurrentApp varchar(35) SET @CurrentApp = APP_NAME() IF (@CurrentApp <> 'MS SQL Query Analyzer')
- 40 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
PRINT 'ce processus n'a pas t dmarr par une cession de Query Analyzer.'
CREATE TABLE Orders ( OrderID INT PRIMARY KEY, CustomerID NCHAR(5) REFERENCES Customers(CustomerID), Workstation NCHAR(30) NOT NULL DEFAULT HOST_NAME(), OrderDate DATETIME NOT NULL, ShipDate DATETIME NULL, ShipperID INT NULL REFERENCES Shippers(ShipperID) )
Comment calculer le nombre de jours qu'il y a dans le mois en cours, sachant que la date du jour m'est donne par la variable @date.
Auteurs : Rudi Bruchez ,
SELECT DAY(DATEADD(d, -DAY(DATEADD(m,1,@Date)),DATEADD(m,1,@date))) AS DernierJourDuMois
- 41 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
WHILE @@FETCH_STATUS = 0 BEGIN set @sql = 'declare @i int select @i=count(*) from '+@tb +' where '+@co+' like ''%'+@cherche+''' if @i > 0 update #result set NBRE=@i where COL='''+@co+''' AND TBL = '''+@tb+'''' exec sp_executesql @sql FETCH NEXT FROM cur INTO @tb, @co END close cur deallocate cur select * from #Result where NBRE>0 drop table #Result end
Attention : selon la volumtrie de la base, la recherche peut tre extrmement longue et coteuse.
Les fonctions scalaires ne peuvent pas contenir : de transaction (BEGIN TRANSACTION, COMMIT, ROLLBACK, de sql dynamique (EXEC ('...') d'ordre de mise jour (INSERT, UPDATE, DELETE, MERGE) d'ordre DDL (CREATE, ALTER, DROP), DCL (GRANT REVOKE) un appel une procdure (EXEC P...) l'utilisation d'un cursor (DECLARE CURSOR, FETCH...) de commande de dbogage comme PRINT
Une fonction table peut contenir des ordres de mise jour, mais ces commandes ne peuvent porter qu'uniquement sur la table en sortie. Une procdure se cre par CREATE PROCEDURE et ses E/S sont : des paramtres input et output un ventuel jeu de rsultat (voir mme plusieurs) une valeur de retour (code d'erreur) Elle peut contenir tout code SQL, y compris : transaction mise jour SQL dynamique cursor commande DDL
- 42 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Bien entendu, vous pouvez crer vos procdures dans diffrents schmas SQL que vous aurez pralablement crs.
- 43 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Exemple :
SELECT * FROM dbo.F_MULTIPARSE('toto, tata-titi', '-,') POS ----------1 2 3 MOT -------------------toto tata titi CHR ---, NULL
Si vous voulez dcouper avec le caractre espace (blanc) il ne faut pas le placer en fin du paramtre @PARSEC sinon il sera ignor du fait du type VARCHAR. Si vous ne voulez parser que sur le blanc, rajouter la suite du blanc un caractre non imprimable (ASCII infrieur 20). Par exemple CHAR(8).
- 44 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
@H = ((19 * @G) + @C - @C4 - @E + 15) % 30; @K = @H / 28, @P = 29 / (@H + 1), @Q = (21 - @G) / 11; @I = (((@K * @P * @Q) - 1 ) * @K) + @H; @J1 = @B + @I + 2 + @C4 - @C; @J2 = @J1 % 7; @R = 28 + @I - @J2; DATEADD(day, @R - 1, CAST(CAST(@AN AS CHAR(4)) +'0301' AS DATE));
Utilisation :
SELECT dbo.F_CALCULE_PAQUES (2009);
Les autres dates des jours fris mobiles sont calcules d'aprs la date de Pque comme suit : Lundi de pques = Pques + 1 Pentecte = Pques + 50 Lundi de Pentecte = Pques + 51 Ascension = Pques 40 (jeudi) Exemple d'utilisation :
WITH T AS (SELECT DISTINCT dbo.F_CALCULE_PAQUES(2009) AS P ), D AS (SELECT P, 'Pques' AS NOM FROM T UNION ALL SELECT DATEADD(day, 1, P), 'Lundi de Pques' FROM T UNION ALL SELECT DATEADD(day, 40, P), 'Ascension' FROM T UNION ALL SELECT DATEADD(day, 50, P), 'Pentecte' FROM T UNION ALL SELECT DATEADD(day, 51, P), 'Lundi de Pentecte' FROM T) SELECT * FROM D; P ---------2009-04-12 2009-04-13 2009-05-22 2009-06-01 2009-06-02 NOM -----------------Pques Lundi de Pques Ascension Pentecte Lundi de Pentecte
- 45 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Sommaire > Trucs et Astuces en T-SQL > Limiter le jeu de rsultat Comment limiter le nombre de lignes retounes par une commande SELECT ?
Auteurs : Wolo Laurent , Fabien Celaia , Pour limiter le nombre de ligne retourn par une commande Select, MS SQL Serveur fournit la commende TOP, C'est un quivalent de la commande Limit de MySQL Exemple:
--Retouner 100 lignes d'une table T_Client SELECT TOP 100 * FROM t_client
OU
Affiche 30 lignes partir de l'enregistrement 10. Voici une solution pour implmenter cette fonctionalit en T-SQL :
SELECT * FROM ( SELECT TOP 30 Field1, Field2 FROM ( SELECT TOP 10 Field1, Field2 FROM matable ORDER BY monchamp asc ) AS tbl1 ORDER BY monchamp desc ) AS tbl2 ORDER BY monchamp asc
et une petite fonction php pour gnraliser, a amliorer selon vos besoins :
function getLimitMSSQL($start, $nbrows, $fields, $table, $where, $orderfield, $sort = 'asc') { $top = $start + $nbrows ; if ( $sort == 'asc' ) { $asc = 'asc' ; $desc = 'desc' ; } else { $asc = 'desc' ; $desc = 'asc' ; } $sql = '' ; $sql = "SELECT * FROM (
- 46 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
SELECT TOP $nbrows $fields from ( SELECT TOP $top $fields FROM $table $where ORDER BY $orderfield $asc ) tbl1 ORDER BY $orderfield $desc ) as tbl2 order by $orderfield $asc " ; return $sql ; }
Comment connatre le nombre d'enregistrements retourns par une requte SELECT, UPDATE, INSERT , DELETE ?
Auteurs : Fabien Celaia , En interrogeant la variable globale @@rowcount, directement aprs l'appel de la requte
- 47 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
CREATE PROCEDURE RecupVariable AS DECLARE @VAR AS VARCHAR(10) SET @VAR = (SELECT champ FROM Table WHERE ..) PRINT @VAR
Si elle retourne plusieurs valeurs ou plusieurs lignes, passer par une table de travail
CREATE PROCEDURE RecupVariable @PARAM INT AS DECLARE @VAR AS VARCHAR(10), @QUERY AS VARCHAR(150) SET @QUERY = 'SELECT champ1 INTO TableTempo FROM Table WHERE champ2 = ' + CAST(@PARAM AS VARCHAR(5)) EXEC(@QUERY) SET @VAR = (SELECT Champ1 FROM TableTempo) DROP TABLE TableTempo PRINT @VAR
DECLARE @idoc int DECLARE @tField TABLE (FieldName varchar(100), Value varchar(100)) EXEC master.dbo.sp_xml_preparedocument @idoc OUTPUT, @KeyValue INSERT INTO @tField (FieldName, Value) SELECT FieldName, Value FROM OPENXML(@idoc, '/Elements/Element', 2) WITH (FieldName varchar(100) 'Key', Value varchar(100))
- 48 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
En tant conscient que les performances du OPENXML peuvent poser problme sur un serveur trs sollicit. A tester.
lien :
Exemple
Comment gnrer un fichier image (.JPG, .GIF) partir d'un champ varbinary ?
Auteurs : davidou2001 , Voici le code pour raliser ceci
-- Le fichier binaire DECLARE @s varbinary(2048) SET @s = 0x47494...code hexa du fichier DECLARE @o int DECLARE @r int EXEC sp_oacreate 'adodb.stream', @o output EXEC sp_oasetproperty @o, 'type', 2 EXEC sp_oamethod @o, 'open' EXEC sp_oamethod @o, 'writetext', NULL, @s EXEC EXEC EXEC EXEC EXEC EXEC sp_oacreate 'adodb.stream', @r output sp_oasetproperty @r, 'type', 1 sp_oamethod @r, 'open' sp_oasetproperty @o, 'position', 2 sp_oamethod @o, 'copyto', NULL, @r sp_oamethod @r, 'savetofile', NULL, @basedir, 2
On peut utiliser la primitive READTEXT pour obtenir le code hexa d'une colonne image, par exemple.
Les jointures ANSI sont-elle similaires aux jointures faites via conditions ?
Auteurs : Frdric Brouard , SQL Server n'est pas compatible avec la norme SQL sur la jointure externe avec *=. Il ne donne pas les mmes rsultats...
CREATE TABLE T1 (C1 INT) INSERT INTO T1 VALUES (1) INSERT INTO T1 VALUES (0) INSERT INTO T1 VALUES (1) CREATE TABLE T2 (C2 INT) INSERT INTO T2 VALUES (2) INSERT INTO T2 VALUES (0) INSERT INTO T2 VALUES (2) CREATE TABLE T3 (C3 INT) INSERT INTO T3 VALUES (3) INSERT INTO T3 VALUES (0) INSERT INTO T3 VALUES (3)
SELECT * FROM T1 LEFT OUTER JOIN T2 ON T1.C1 = T2.C2 LEFT OUTER JOIN T3 ON T1.C1 = T3.C3 - 49 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
C1 ----------1 0 1
C2 ----------NULL 0 NULL
C3 ----------NULL 0 NULL
SELECT * FROM T1, T2, T3 WHERE C1 *= C2 AND C1 *= C3 C1 ----------1 0 1 -- exact ! SELECT * FROM T1 LEFT OUTER JOIN T2 ON T1.C1 = T2.C2 LEFT OUTER JOIN T3 ON T2.C2 = T3.C3 C1 ----------1 0 1 SELECT FROM WHERE AND C2 ----------NULL 0 NULL C3 ----------NULL 0 NULL C2 ----------NULL 0 NULL C3 ----------NULL 0 NULL
* T1, T2, T3 C1 *= C2 C2 *= C3
-- Serveur : Msg 301, Niveau 16, tat 1, Ligne 1 -- La requte comporte une requte de jointure externe qui n'est pas autorise. -- SQL Server ne sait pas faire des jointures externes en cascade...
SELECT * FROM T1 INNER JOIN (SELECT * FROM T2) AS T ON T1.C1 = T.C2 RIGHT OUTER JOIN T3 ON T.C2 = T3.C3 C1 ----------NULL 0 NULL SELECT FROM WHERE AND C2 ----------NULL 0 NULL C3 ----------3 0 3
T2) AS T, T3
-- Serveur : Msg 303, Niveau 16, tat 1, Ligne 1 -- La table 'T2' est un membre interne d'une clause de jointure externe. Cela n'est pas autoris si la table par -- SQL Server ne sait pas faire des jointures externes en cascade...
SELECT * FROM T1 RIGHT OUTER JOIN T2 ON T1.C1 = T2.C2 RIGHT OUTER JOIN T3 ON T1.C1 = T3.C3
- 50 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
C2 ----------NULL 0 NULL
C3 ----------3 0 3
N'oubliez pas que avant que la norme SQL ne statut en 1992 sur les jointures externes chaque diteur de SGBD tait llibre de faire sa sauce... Cette interprtation de la jointure externe date de l'poque Sybase... Depuis 2005 une telle syntaxe est heureusement interdite !
- 51 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
* FA : Fils ain * * FC : Fils cadet * * P : Pre * * @recurs si 1 dplacement de tout le sous arbre, * * si 0 dplacement de l'lment seul * ******************************************************************************/ DECLARE @OK @bdmax @deltab @bgd @bdd @nivd @bgp @bdp @nivp int, int, -- limite suprieure droite de l'arborescence int, -- Delta de borne int, -- Infos sur le dplac int, int, int, -- Infos sur le parent int, int
-- Mode silencieux SET NOCOUNT ON; -- contrle d'excution IF @mode IS NULL BEGIN RAISERROR ('Dplacement impossible sans mode ! (TABLE dbo.T_NOMENCLATURE_PIECES_NMC)', 16, 1) RETURN END IF @recurs IS NULL BEGIN RAISERROR ('Dplacement impossible sans type ! (TABLE dbo.T_NOMENCLATURE_PIECES_NMC)', 16, 1) RETURN END IF @id IS NULL BEGIN RAISERROR ('Dplacement impossible sans prcision de l''lment ! (TABLE dbo.T_NOMENCLATURE_PIECES_NMC)', 16, 1) RETURN END IF @id_parent IS NULL BEGIN RAISERROR ('Dplacement impossible sans prcision du destinataire ! (TABLE dbo.T_NOMENCLATURE_PIECES_NMC)', 16, 1) RETURN END IF @id = @id_parent BEGIN RAISERROR ('Dplacement impossible , origine et destination identique ! (TABLE dbo.T_NOMENCLATURE_PIECES_NMC)', 16, 1) RETURN END SET @mode = UPPER(@mode) IF NOT( @mode = 'GF' OR @mode = 'PF' OR @mode = 'FC' OR @mode = 'FA' ) -- OR @mode = 'P' -- PBT: vrifier ! BEGIN RAISERROR ('Dplacement impossible, mode inconnu ! (TABLE dbo.T_NOMENCLATURE_PIECES_NMC)', 16, 1) RETURN END
-- dmarrage transaction ------------------SET TRANSACTION ISOLATION LEVEL SERIALIZABLE BEGIN TRANSACTION MOVE_NMC
- 52 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
-- L'lment existe toujours ? SELECT @OK = count(*) FROM dbo.T_NOMENCLATURE_PIECES_NMC WHERE NMC_ID = @id IF @OK IS NULL OR @OK = 0 BEGIN RAISERROR ('Dplacement impossible, l''lment n''existe pas ! (TABLE dbo.T_NOMENCLATURE_PIECES_NMC)', 16, 1) GOTO LBL_ERROR RETURN END -- Le parent existe toujours ? SELECT @OK = count(*) FROM dbo.T_NOMENCLATURE_PIECES_NMC WHERE NMC_ID = @id_parent IF @OK IS NULL OR @OK = 0 BEGIN RAISERROR ('Dplacement impossible, le parent n''existe pas ! (TABLE dbo.T_NOMENCLATURE_PIECES_NMC)', 16, 1) GOTO LBL_ERROR RETURN END -- On rcupre la borne suprieure max de l'ensemble SELECT @bdmax = max(NMC_BD) FROM dbo.T_NOMENCLATURE_PIECES_NMC IF @bdmax IS NULL OR @bdmax = 0 BEGIN RAISERROR ('Dplacement impossible, la borne BD est nulle ! (TABLE dbo.T_NOMENCLATURE_PIECES_NMC)', 16, 1) GOTO LBL_ERROR RETURN END -- On a un lment : on rcupre ses caractristiques SELECT @bgd = NMC_BG, @bdd = NMC_BD, @nivd = NMC_NIVEAU FROM dbo.T_NOMENCLATURE_PIECES_NMC WHERE NMC_ID = @id IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END SET @deltab = @bdmax + 1 - @bgd -- DEBUT de l'opration proprement dite... -- Opration rcursive ? IF @recurs = 0 BEGIN -- Seul l'lment doit tre dplac -- dplacement de l'lment seul en fin de liste UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BG = NMC_BG + @deltab, NMC_BD = NMC_BD + @deltab WHERE NMC_ID = @id IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END -- remonte de ses descendants dans la hirarchie UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BG = NMC_BG - 1, NMC_BD = NMC_BD - 1, NMC_NIVEAU = NMC_NIVEAU - 1 WHERE NMC_BG > @bgd AND NMC_BD < @bdd IF @@ERROR <> 0 BEGIN
- 53 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
GOTO LBL_ERROR RETURN END -- rquilibrage de l'arbre UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BG = NMC_BG - 2 WHERE NMC_BG > @bdd AND NMC_BG < @bdmax IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END -UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BD = NMC_BD - 2 WHERE NMC_BD > @bdd AND NMC_BD <= @bdmax IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END -- Mise en place de l'lement deplac -- On rcupre d'abord les caractristiques du parent SELECT @bgp = NMC_BG, @bdp = NMC_BD, @nivp = NMC_NIVEAU FROM dbo.T_NOMENCLATURE_PIECES_NMC WHERE NMC_ID = @id_parent IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END -- Grand frre IF @mode = 'GF' BEGIN -- Limite sup. UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BD = NMC_BD + 2 WHERE NMC_BD >= @bdp AND NMC_BD <= @bdmax IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END -- Limite inf. UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BG = NMC_BG + 2 WHERE NMC_BG >= @bgp AND NMC_BG < @bdmax IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BG = @bgp, NMC_BD = @bgp + 1, NMC_NIVEAU = @nivp WHERE NMC_ID = @id IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END END
- 54 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
-- Petit Frre IF @mode = 'PF' BEGIN -- Limite sup. UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BD = NMC_BD + 2 WHERE NMC_BD > @bdp AND NMC_BD <= @bdmax IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END -- Limite inf. UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BG = NMC_BG + 2 WHERE NMC_BG > @bdp AND NMC_BG < @bdmax IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BG = @bdp + 1, NMC_BD = @bdp + 2, NMC_NIVEAU = @nivp WHERE NMC_ID = @id IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END END -- Fils cadet IF @mode = 'FC' BEGIN -- Limite sup. UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BD = NMC_BD + 2 WHERE NMC_BD >= @bdp AND NMC_BD <= @bdmax IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END -- Limite inf. UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BG = NMC_BG + 2 WHERE NMC_BG > @bdp AND NMC_BG < @bdmax IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BG = @bdp, NMC_BD = @bdp + 1, NMC_NIVEAU = @nivp + 1 WHERE NMC_ID = @id IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN
- 55 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
END END -- Fils ain IF @mode = 'FA' BEGIN -- Limite sup. UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BD = NMC_BD + 2 WHERE NMC_BD > @bgp AND NMC_BD <= @bdmax IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END -- Limite inf. UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BG = NMC_BG + 2 WHERE NMC_BG > @bgp AND NMC_BG < @bdmax IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BG = @bgp + 1, NMC_BD = @bgp + 2, NMC_NIVEAU = @nivp + 1 WHERE NMC_ID = @id IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END END END ELSE BEGIN -- L'lment et sa descendance doivent tre dplacs -- dplacement de l'lment et de sa descendance en fin de liste -- Le niveau sera ractualis ultrieurement UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BG = NMC_BG + @deltab, NMC_BD = NMC_BD + @deltab, NMC_NIVEAU = NMC_NIVEAU - @nivd WHERE NMC_BG >= @bgd AND NMC_BD <= @bdd IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END -- rtablissement des bornes -- Calcul du Delta SET @deltab = @bdd - @bgd + 1 -UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BD = NMC_BD - @deltab WHERE NMC_BD > @bdd AND NMC_BG <= @bdmax IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END
- 56 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
-UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BG = NMC_BG - @deltab WHERE NMC_BG > @bdd AND NMC_BG < @bdmax IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END -- On rcupre d'abord les caractristiques du parent SELECT @bgp = NMC_BG, @bdp = NMC_BD, @nivp = NMC_NIVEAU FROM dbo.T_NOMENCLATURE_PIECES_NMC WHERE NMC_ID = @id_parent IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END -- Mise en place de l'lement deplac -- Grand frre IF @mode = 'GF' BEGIN -- Limite sup. UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BD = NMC_BD + @deltab WHERE NMC_BD > @bgp AND NMC_BD <= @bdmax IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END -- Limite inf. UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BG = NMC_BG + @deltab WHERE NMC_BG >= @bgp AND NMC_BG < @bdmax IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END -- Recadrage de la liste d'lments dplacs SET @deltab = @bdmax - @bgp + 1 UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BG = NMC_BG - @deltab, NMC_BD = NMC_BD - @deltab, NMC_NIVEAU = NMC_NIVEAU + @nivp WHERE NMC_BG > @bdmax IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END END -- Petit Frre IF @mode = 'PF' BEGIN -- Limite sup. UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BD = NMC_BD + @deltab WHERE NMC_BD > @bdp AND NMC_BD <= @bdmax IF @@ERROR <> 0 BEGIN
- 57 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
GOTO LBL_ERROR RETURN END -- Limite inf. UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BG = NMC_BG + @deltab WHERE NMC_BG > @bdp AND NMC_BG < @bdmax IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END -- Recadrage de la liste d'lments dplacs SET @deltab = @bdmax - @bdp UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BG = NMC_BG - @deltab, NMC_BD = NMC_BD - @deltab, NMC_NIVEAU = NMC_NIVEAU + @nivp WHERE NMC_BG > @bdmax IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END END -- Fils cadet IF @mode = 'FC' BEGIN -- Limite sup. UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BD = NMC_BD + @deltab WHERE NMC_BD >= @bdp AND NMC_BD <= @bdmax IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END -- Limite inf. UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BG = NMC_BG + @deltab WHERE NMC_BG > @bdp AND NMC_BG < @bdmax IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END -- Recadrage de la liste d'lments dplacs SET @deltab = @bdmax - @bdp + 1 UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BG = NMC_BG - @deltab, NMC_BD = NMC_BD - @deltab, NMC_NIVEAU = NMC_NIVEAU + @nivp + 1 WHERE NMC_BG > @bdmax IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END END -- Fils ain IF @mode = 'FA' BEGIN
- 58 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
-- Limite sup. UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BD = NMC_BD + @deltab WHERE NMC_BD > @bgp AND NMC_BD <= @bdmax IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END -- Limite inf. UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BG = NMC_BG + @deltab WHERE NMC_BG > @bgp AND NMC_BG < @bdmax IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END -- Recadrage de la liste d'lments dplacs SET @deltab = @bdmax - @bgp UPDATE dbo.T_NOMENCLATURE_PIECES_NMC SET NMC_BG = NMC_BG - @deltab, NMC_BD = NMC_BD - @deltab, NMC_NIVEAU = NMC_NIVEAU + @nivp + 1 WHERE NMC_BG > @bdmax IF @@ERROR <> 0 BEGIN GOTO LBL_ERROR RETURN END END END COMMIT TRANSACTION MOVE_NMC GOTO LBL_FINAL RETURN LBL_ERROR: ROLLBACK TRANSACTION MOVE_NMC LBL_FINAL: SET TRANSACTION ISOLATION LEVEL READ COMMITTED GO
Pour l'adapter votre table spcifique, il suffit de remplacer les noms de la tables et des diffrentes colonnes, afin de l'adpater votre cas. Exemple d'excution :
EXEC dbo.P_MOVE_TRE 45, 108, 'FA', 1
- 59 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Bon amusement !
- 60 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
-- et autorelations de la table traiter CREATE TABLE dbo.TMP_TREE_SQLPro (CLEF INT NOT NULL, CLEF_REF INT); -- la table TMP_STACK_SQLPro existe t-elle dans la base B_DATASAPIENS_OS_FILE -- pour l'utilisateur courant ? Si oui, la virer ! IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'TMP_STACK_SQLPro') BEGIN SET @SQL = 'DROP TABLE dbo.TMP_STACK_SQLPro' EXEC (@SQL) END -- on cr la table TMP_STACK_SQLPro pour grer une pile afin de drcursiver l'arbre CREATE TABLE dbo.TMP_STACK_SQLPro (PILE INTEGER NOT NULL, CLEF CHAR(10) NOT NULL, GAUCHE INTEGER, DROITE INTEGER); -- on y insre les valeurs dedans SET @SQL = 'INSERT INTO dbo.TMP_TREE_SQLPro SELECT ' + @COL_ID + ', ' + @COL_ID_PERE + ' FROM ' + @TABLE_SCHEMA + '.' + @TABLE_NAME EXECUTE (@SQL)
-- variables locales DECLARE @COMPTEUR INTEGER; DECLARE @MAX_CPTR INTEGER; DECLARE @POINTEUR INTEGER; -- initialisation SET @COMPTEUR = 2; SET @MAX_CPTR = 2 * (SELECT COUNT(*) FROM TMP_TREE_SQLPro); SET @POINTEUR = 1; -- insertion de la racine de l'arbre dans la pile INSERT INTO TMP_STACK_SQLPro SELECT 1, CLEF, 1, NULL FROM dbo.TMP_TREE_SQLPro WHERE CLEF_REF IS NULL; -- et on supprime la rfrence la racine DELETE FROM dbo.TMP_TREE_SQLPro WHERE CLEF_REF IS NULL; -- tant que l'on a pas trait toute l'enveloppe intervallaire WHILE @COMPTEUR <= (@MAX_CPTR) BEGIN -- s'il existe des lignes traiter IF EXISTS (SELECT * FROM dbo.TMP_STACK_SQLPro AS S INNER JOIN dbo.TMP_TREE_SQLPro AS T ON S.CLEF = T.CLEF_REF WHERE S.PILE = @POINTEUR) BEGIN -- empile tant que la ligne analyse a des fils (calcul de la borne gauche) INSERT INTO dbo.TMP_STACK_SQLPro SELECT @POINTEUR + 1, MIN(T.CLEF), @COMPTEUR, NULL FROM dbo.TMP_STACK_SQLPro AS S INNER JOIN dbo.TMP_TREE_SQLPro AS T ON S.CLEF = T.CLEF_REF
- 61 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
WHERE S.PILE = @POINTEUR; -- supprime la ligne analyse DELETE FROM dbo.TMP_TREE_SQLPro WHERE CLEF = (SELECT CLEF FROM dbo.TMP_STACK_SQLPro WHERE PILE = @POINTEUR + 1); -- incrmente compteur et pointeur SET @COMPTEUR = @COMPTEUR + 1; SET @POINTEUR = @POINTEUR + 1; END ELSE BEGIN -- dpile parce que que la ligne analyse n'a plus de fils (calcul de la borne droite) UPDATE dbo.TMP_STACK_SQLPro SET DROITE = @COMPTEUR, PILE = - PILE -- pops the Stack WHERE PILE = @POINTEUR -- incrmente compteur et dcrmente pointeur SET @COMPTEUR = @COMPTEUR + 1; SET @POINTEUR = @POINTEUR - 1; END; END; -- met jour la table cible avec ces calculs SET @SQL = ' UPDATE ' + @TABLE_SCHEMA + '.' + @TABLE_NAME + ' SET ' + @COL_BG + ' = S.GAUCHE, ' + @COL_BD + ' = S.DROITE' + ' FROM dbo.TMP_STACK_SQLPro S INNER JOIN ' + @TABLE_NAME + ' T ON S.CLEF = T.'+@COL_ID EXEC (@SQL) -- suppression des tables pseudo temporaires IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'TMP_TREE_SQLPro') BEGIN SET @SQL = 'DROP TABLE dbo.TMP_TREE_SQLPro' EXEC (@SQL) END IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'TMP_STACK_SQLPro') BEGIN SET @SQL = 'DROP TABLE dbo.TMP_STACK_SQLPro' EXEC (@SQL) END GO
- 62 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT GO
INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO
dbo.FAMILLE dbo.FAMILLE dbo.FAMILLE dbo.FAMILLE dbo.FAMILLE dbo.FAMILLE dbo.FAMILLE dbo.FAMILLE dbo.FAMILLE dbo.FAMILLE dbo.FAMILLE dbo.FAMILLE dbo.FAMILLE dbo.FAMILLE dbo.FAMILLE dbo.FAMILLE dbo.FAMILLE
(FAM_ID, (FAM_ID, (FAM_ID, (FAM_ID, (FAM_ID, (FAM_ID, (FAM_ID, (FAM_ID, (FAM_ID, (FAM_ID, (FAM_ID, (FAM_ID, (FAM_ID, (FAM_ID, (FAM_ID, (FAM_ID, (FAM_ID,
FAM_LIB, FAM_LIB, FAM_LIB, FAM_LIB, FAM_LIB, FAM_LIB, FAM_LIB, FAM_LIB, FAM_LIB, FAM_LIB, FAM_LIB, FAM_LIB, FAM_LIB, FAM_LIB, FAM_LIB, FAM_LIB, FAM_LIB,
FAM_PERE) FAM_PERE) FAM_PERE) FAM_PERE) FAM_PERE) FAM_PERE) FAM_PERE) FAM_PERE) FAM_PERE) FAM_PERE) FAM_PERE) FAM_PERE) FAM_PERE) FAM_PERE) FAM_PERE) FAM_PERE) FAM_PERE)
VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES
(5, 'Camion', 1) (6, 'Moto', 1) (7, 'Vlo', 1) (8, 'Hlico', 3) (9, 'Avion', 3) (10, 'ULM', 3) (11, 'Fuse', 3) (12, 'Parachute', 3) (13, 'Planeur', 3) (14, 'Voilier', 2) (15, 'Paquebot', 2) (16, 'Planche voile', 2) (17, 'Trail', 6) (18, 'Side-car', 6) (19, 'Civil', 9) (20, 'Tourisme', 9) (21, 'Militaire', 9)
/****************************************************************************** -- transformation du mode auto rfrence en mode intervallaire ******************************************************************************/ -- modification de la table d'origine pour ajout des bornes gauches et droite : ALTER TABLE dbo.FAMILLE ADD FAM_BG INT; ALTER TABLE dbo.FAMILLE ADD FAM_BD INT; GO -- excution de la transformation EXEC dbo.P_DERECURSIVE_TREE 'dbo', 'FAMILLE', 'FAM_ID', 'FAM_PERE', 'FAM_BG', 'FAM_BD' GO -- indexation CREATE INDEX X_FAM_RECURINTERVAL ON dbo.FAMILLE (FAM_BG, FAM_BD) WITH FILLFACTOR = 90; /****************************************************************************** -- ajout du niveau ******************************************************************************/ -- modification de la table d'origine pour ajout du niveau : ALTER TABLE dbo.FAMILLE ADD FAM_NIVEAU INT; GO -- mise jour du niveau : UPDATE dbo.FAMILLE SET FAM_NIVEAU = N FROM dbo.FAMILLE AS F INNER JOIN (SELECT *, (SELECT COUNT(*) FROM dbo.FAMILLE AS Tin WHERE Tin.FAM_BG < Tout.FAM_BG AND Tin.FAM_BD > Tout.FAM_BD) AS N FROM dbo.FAMILLE AS Tout) AS FN ON F.FAM_ID = FN.FAM_ID; -- vrification : SELECT * FROM dbo.FAMILLE;
- 63 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
CQFD !
Comment rcuprer par la suite la valeur du ROWCOUNT correspondant au rglage et non @@ROWCOUNT qui correspond au nombre d'lment rellement traits ?
Auteurs : Frdric Brouard ,
SET ROWCOUNT 3 CREATE TABLE #T (OPT NVARCHAR(128), VAL SQL_VARIANT); INSERT INTO #T EXEC ('DBCC USEROPTIONS'); SELECT VAL FROM #T WHERE OPT = 'rowcount'; VAL -------------------3
Cependant partir de 2005 l'utilisation de TOP n ne pose pas de problme vu que vous pouvez faire un TOP @N
- 64 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Sommaire > Trucs et Astuces en T-SQL > Validation des donnes Comment vrifier qu'une valeur entre est une date valide ?
Auteurs : Wolo Laurent , Pour vrifier qu'une valeur entre est une date, nous utilisons la fonction IsDate Exemple :
La seul chose que vous pouvez faire si la ma noeuvre ci dessus est impossible, c'est d'utiliser un outil comme log explorer de Lumigent ou encore celui de Redgate Software pour "voir" le journal de transaction. Mais pour des raisons de paradoxe temporel il est strictement impossible d'annuler un transaction finalise. Ce sont des choses qu'il faut prvoir AVANT !
- 65 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
N'oubliez jamais que les donnes sont un patrimoine important de l'entreprise... Dans le service informatique, les donnes sont le capital LE PLUS IMPORTANT... ce que les informaticiens ont tendance oublier !
SET XACT_ABORT ON
lien :
Sur MSDN
Cette requte mesure l'efficacit d'un index par rapport l'utilisation de la table et donne un pourcentage. plus ce pourcentage est lev, et plus cet index est utilis au dtriment de la table. Les index dont la mesure d'efficacit tend vers zro sont supprimer. A noter les index sous-jacents aux contraintes SQL (PRIMARY KEY et UNIQUE) ne sont pas scruts. Cette requte n'a d'intrt que sur un serveur en exploitation n'ayant pas t rcemment arrt. 2. Cette requte gnre un script SQL de suppression des index inutiles
select 'DROP INDEX [' + I.name +'] ON [' + SCHEMA_NAME(o.schema_id) + '].['+ OBJECT_NAME(IUS.object_id) +'];' from sys.dm_db_index_usage_stats AS IUS INNER JOIN sys.objects AS o
- 66 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Cette requte permet de gnrer un script de suppression des index inutiliss. De la mme faon cette requte ne prends pas en compte les index sous-jacents aux contraintes (clefs primaires et unicit). Cette requte n'a d'intrt que sur un serveur en exploitation n'ayant pas t rcemment arrt. 3. Contraintes d'intgrit non indexes
WITH T_IDX AS (SELECT TABLE_SCHEMA, TABLE_NAME, i.name AS INDEX_NAME, c.name AS COLUMN_NAME, key_ordinal AS ORDINAL_POSITION FROM sys.indexes AS i INNER JOIN sys.objects AS o ON i.object_id = o.object_id INNER JOIN sys.schemas AS s ON o.schema_id = s.schema_id INNER JOIN INFORMATION_SCHEMA.TABLES AS T ON s.name = T.TABLE_SCHEMA AND o.name = TABLE_NAME INNER JOIN sys.index_columns AS ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id INNER JOIN sys.columns AS c ON i.object_id = c.object_id AND ic.column_id = c.column_id WHERE is_included_column = 0), T_CFK AS (SELECT TC.TABLE_SCHEMA, TC.TABLE_NAME, TC.CONSTRAINT_NAME, COLUMN_NAME, ORDINAL_POSITION FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU ON TC.TABLE_SCHEMA = KCU.TABLE_SCHEMA AND TC.TABLE_NAME = KCU.TABLE_NAME AND TC.CONSTRAINT_NAME = KCU.CONSTRAINT_NAME WHERE CONSTRAINT_TYPE = 'FOREIGN KEY') SELECT T_CFK.TABLE_SCHEMA, T_CFK.TABLE_NAME, T_CFK.CONSTRAINT_NAME FROM T_CFK EXCEPT SELECT T_CFK.TABLE_SCHEMA, T_CFK.TABLE_NAME, T_CFK.CONSTRAINT_NAME FROM T_IDX INNER JOIN T_CFK ON T_IDX.TABLE_SCHEMA = T_CFK.TABLE_SCHEMA AND T_IDX.TABLE_NAME = T_CFK.TABLE_NAME AND T_IDX.COLUMN_NAME = T_CFK.COLUMN_NAME WHERE (SELECT COUNT(*) FROM T_IDX AS X WHERE X.TABLE_SCHEMA = T_CFK.TABLE_SCHEMA AND X.TABLE_NAME = T_CFK.TABLE_NAME AND X.COLUMN_NAME = T_CFK.COLUMN_NAME GROUP BY INDEX_NAME) = (SELECT COUNT(*) FROM T_IDX AS K WHERE K.TABLE_SCHEMA = T_CFK.TABLE_SCHEMA AND K.TABLE_NAME = T_CFK.TABLE_NAME AND K.COLUMN_NAME = T_CFK.COLUMN_NAME GROUP BY INDEX_NAME);
- 67 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Cette requte donne les contrainte d'intgrit rfrentielles n'ayant pas d'index correspondant (quelque soit l'ordre des colonnes).
- 68 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Sommaire > Trucs et Astuces en T-SQL > Programmation des bases de donnes Comment dsactiver et ractiver un dclencheur ?
Auteurs : Wolo Laurent , MS SQL Serveur, partir de la version 2000, prvoit une option dans l'instruction ALTER TABLE qui permet de dsactiver et ractiver un dclencheur. Exemple : L'exemple suivant utilise l'option DISABLE TRIGGER de l'instruction ALTER TABLE pour dsactiver le dclencheur et permettre une insertion qui devrait normalement entraner une violation du dclencheur. Le dclencheur est ensuite ractiv l'aide de l'option ENABLE TRIGGER.
CREATE TABLE trig_example (id INT, name VARCHAR(10), salary MONEY) go -- Creation du dclencheur CREATE TRIGGER trig1 ON trig_example FOR INSERT as IF (SELECT COUNT(*) FROM INSERTED WHERE salary > 100000) > 0 BEGIN print "TRIG1 Error: Vous tentez d'inserer un salaire > $100,000" ROLLBACK TRANSACTION END GO -- Tentative d'insertion d'une valeur qui viole la contrainte. INSERT INTO trig_example VALUES (1,'Pat Smith',100001) GO -- Nous allons maintenant dsactiver le dclencheur. ALTER TABLE trig_example DISABLE TRIGGER trig1 GO -- Nous allons inserer une valeur qui normalement viole le dclencheur INSERT INTO trig_example VALUES (2,'Chuck Jones',100001) GO -- Ractivation du dclencheur ALTER TABLE trig_example ENABLE TRIGGER trig1 GO -- Et l'on teste si notre dclencheur est ractiv. INSERT INTO trig_example VALUES (3,'Mary Booth',100001) GO
CREATE TABLE cnst_example (id INT NOT NULL, name VARCHAR(10) NOT NULL,
- 69 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
salary MONEY NOT NULL CONSTRAINT salary_cap CHECK (salary < 100000) ) -- Nous commenons par inserer deux lignes INSERT INTO cnst_example VALUES (1,'Joe Brown',65000) INSERT INTO cnst_example VALUES (2,'Mary Smith',75000) -- Ensuite, nous tentons de violer notre contrainte check INSERT INTO cnst_example VALUES (3,'Pat Jones',105000) -- Nous dsactivons la contrainte puis nous relanons ALTER TABLE cnst_example NOCHECK CONSTRAINT salary_cap INSERT INTO cnst_example VALUES (3,'Pat Jones',105000) -- Nous ractivons notre contrainte puis violant la requte. ALTER TABLE cnst_example CHECK CONSTRAINT salary_cap INSERT INTO cnst_example VALUES (4,'Eric James',110000)
--Soit une table T_Table dont la dfinition est la suivante: CREATE TABLE T_TABLE1 ( TAB_ID INT NOT NULL PRIMARY KEY, TAB_VAL NUMERIC(32) NOT NULL ) GO --Nous initialisons la table INSERT INTO T_TABLE1 VALUES(1,500) INSERT INTO T_TABLE1 VALUES(2,1500) INSERT INTO T_TABLE1 VALUES(3,2000) INSERT INTO T_TABLE1 VALUES(4,1800) GO --Supposant que nous vonlons interdire l'ajout et la modification des valeurs dans cette table --Nous crons un dclencheur a cet effet. CREATE TRIGGER TG_NO_ADD_UPDATE ON T_TABLE1 FOR INSERT,UPDATE AS IF UPDATE(TAB_ID) RAISERROR ('Interdiction formelle d''ajouter ou modifier les donnes de cette tables', 16, 10) go --Tentative d'ajout d'une ligne INSERT INTO T_TABLE1 VALUES(5,600) GO --Cette instruction est refoule !!!
- 70 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Fermer la fentre de droite pour conserver la mme connexion, puis dans l'explorateur d'objet, faire clic droit sur la procdure stocke puis Dbogage
Si l'on souhaite, dans le cas extrme, lier 2 tables de 2 bases distinctes, situes chacune sur un serveur distinct, il faudra donc utiliser la nomenclature complte, en prenant soin au pralable de dterminer le serveur distant/li
- 71 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Exemple
SELECT P.Nom, P.Prenom, L.NomLocalite FROM Personnes P INNER JOIN ServeurDistant.BaseDistante..Localites L ON P.CodeLocalite=L.IDLocalite
- 72 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
GO
- 73 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
DECLARE @OUT VARCHAR(max); SET @OUT = ''; SELECT @OUT = @OUT + @ALIAS_LEFT +'.' + COLUMN_NAME +' = ' + @ALIAS_RIGHT + '.' + COLUMN_NAME + ' AND ' FROM (SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @SHEMA_LEFT AND TABLE_NAME = @TABLE_LEFT INTERSECT SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @SHEMA_RIGHT AND TABLE_NAME = @TABLE_RIGHT) AS T; IF LEN(@OUT) > 4 SET @OUT = SUBSTRING(@OUT, 1, LEN(@OUT) - 4); RETURN @OUT; END GO
- 74 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Sommaire > Trucs et Astuces en T-SQL > Champs auto-incrments Comment insrer une valeur implicite dans un champs auto-incrment ?
Auteurs : Wolo Laurent , SET IDENTITY_INSERT Autorise l'insertion de valeurs explicites dans la colonne d'identit d'une table. Exemple :
SET IDENTITY_INSERT products ON GO INSERT INTO products (id, product) VALUES(3, 'garden shovel'). GO SET IDENTITY_INSERT product OFF GO
Cette faon de faire va l'encontre du comportement mme de l'identity et ne devrait tre utilise qu'exceptionnellement.
Utiliser la fonction IDENT_CURRENT pour Renvoie la dernire valeur d'identit gnre pour une table spcifie dans n'importe quelles sessions et porte.
SELECT IDENT_CURRENT('t_produit')
- 75 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Sommaire > Utilisation des utilitaires Comment savoir si l'excution d'un utilitaire (bcp, isql, osql) s'est bien droul ?
Auteurs : Fabien Celaia , En interrogeant la variable systme %ERRORLEVEL%, directement aprs l'appel de l'excutable. 0 = succs, sinon 1
ou
DBCC LOG('MaBase')
ou encore via d'autres outils plus conviviaux mais payants (ex: Log Explorer de Lumigent)
lien :
Document Microsoft
Que deviennent mes jobs DTS avec Microsoft SQL Server 2005 ?
Auteurs : Fabien Celaia , La base msdb, contenant tous les jobs, est reprise telle quelle lors de la migration. Compte tenu que le workflow a t totalement revu, il est vivement conseill de rcrire tous les jobs DTS en package SSIS.
- 76 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
Les symptmes d'une transaction reste ouverte ou d'une rplication mal calibre sont une croissance excessive du journal de transactions de la base.
- 77 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
IF EXISTS (SELECT * FROM sys.databases WHERE name = 'TEST_SB_1') DROP DATABASE TEST_SB_1; GO CREATE DATABASE TEST_SB_1; GO USE TEST_SB_1; GO /******************************************************* -- ETAPE n1 : mise en place des objets de travail *******************************************************/ -- cration des files d'attentes CREATE QUEUE Q_1; CREATE QUEUE Q_2; -- cration des services et initiation de la conversation CREATE SERVICE SRV_1 ON QUEUE Q_1 ([DEFAULT]); CREATE SERVICE SRV_2 ON QUEUE Q_2 ([DEFAULT]); -- quelques options : -- AUTHORIZATION owner_name :: permet de crer le service pour un autre user SQL -- ( contract_name | [DEFAULT] [ ,...n ] ) :: permet de dfinir des contrats associs au service
/********************************************* -- ETAPE n2 : expdition *********************************************/ -- envoie d'un message identifi par un GUID DECLARE @UID UNIQUEIDENTIFIER; BEGIN DIALOG @UID FROM SERVICE SRV_1 TO SERVICE 'SRV_2'; SEND ON CONVERSATION @UID ('Bonjour monde'); -- message lanc -- interrogation de la file d'attente ct reception (en fait une table d'un type particulier) SELECT * FROM Q_2; -- ? Q_2 est vide... pourquoi ? -- constatons que Q_1 est aussi vide SELECT * FROM Q_1; -- ou le message est-il bloqu ? SELECT * FROM sys.transmission_queue; -- le message est l, mais ... SELECT transmission_status FROM sys.transmission_queue; --=> Par dfaut on ne peut pas transmettre en clair ! Il faut crypter -- cration d'une clef de cryptage pour la base CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'P@ssw0rd!'; -- envoi d'un 2eme message DECLARE @UID UNIQUEIDENTIFIER; BEGIN DIALOG @UID FROM SERVICE SRV_1 TO SERVICE 'SRV_2';
- 78 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
-- quelques options : -- LIFETIME = <dure en sec> par dfaut 2 milliards de secondes (en fait maxint, soit 68 ans) -- WITH ENCRYPTION = { ON | OFF } par dfaut ON SEND ON CONVERSATION @UID ('Bonjour monde 2'); -- 2eme message envoy -- pour mettre fin la conversation -- END CONVERSATION @UID -- est-il dans la file ? SELECT * FROM Q_2; /********************************************* * ETAPE n3 : du ct du destinataire *********************************************/ -- voyons le message DECLARE @MSG VARBINARY(MAX); DECLARE @HDL UNIQUEIDENTIFIER; -- lecture du message SELECT TOP(1) @MSG = message_body, @HDL = conversation_handle FROM Q_2; -- utilisation du message PRINT 'Le message transmis est : ' + CAST (@MSG AS VARCHAR(MAX)); -- le message est toujours dans la file. Il n'a pas t "dpil" SELECT * FROM Q_2; /********************************************* => ETAPE n4 : acquittement *********************************************/ -- consommons le message DECLARE @HDL UNIQUEIDENTIFIER; -- lecture desctructrice RECEIVE TOP(1) @HDL = conversation_handle FROM Q_2; --=> Receive : nouvel ordre Transact SQL comparable au SELECT, mais : LECTURE UNIQUE (DESTRUCTRICE) ! -- en fait dpile le message de la pile consititu par la table Q_2 ou le place dans un statut "lu", -- en fonction des paramtres de rtention dfinit lors de la cration de la queue -- le message n'est plus dans la file. Il a t "consomm" SELECT * FROM Q_2; -- envoi de l'acquittement SEND ON CONVERSATION @HDL ('OK : Bien reu !'); -- arrt de la conversation ct destinataire END CONVERSATION @HDL; -- Combien de messages dans Q1 ? SELECT * FROM Q_1; --=> le message envoy en retour et le message indiquant la fin du dialogue : -message_type_name "EndDialog" (XML schma du Service Broker MS) /********************************************* * ETAPE n5 : rception de l'acquittement *********************************************/ -- lecture du message d'acquittement
- 79 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/
DECLARE @MSG VARBINARY(max); DECLARE @HDL UNIQUEIDENTIFIER; RECEIVE TOP(1) @MSG = message_body, @HDL = conversation_handle FROM Q_1; -- le message est reut et son "enveloppe" dtruite -- affichage du message d'acuittement ct expditeur PRINT 'Le message est : ' + CAST (@MSG AS VARCHAR (max)); -- fin de la conversation ct expditeur END CONVERSATION @HDL;
/********************************************* * Le service broker est-il activ ? *********************************************/ --voir l'tat des bases pour SELECT name, service_broker_guid, is_broker_enabled FROM sys.databases; -- modification du service broker pour la base ALTER DATABASE TEST_SB_1 SET disable_broker; -- pour ractiver : ALTER DATABASE TEST_SB_1 SET enable_broker;
Il nous faudrait encore parler des CONTRACT, des ROUTE et de bien d'autres objets que l'on trouve dans cet outil, mais l c'est une autre affaire...
- 80 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://sqlserver.developpez.com/faq/