pour tester sql server, je me suis amuse (non sans mal) a enregistrer 5 millions de ligne dans une table
j'ai fait des relations des index etc jusque la ca va
par exemple j'arrive meme pas a effacer le contenu de la table avec un delete from matable. j'ai un time out
ca a l'air d'effacer mais y a une expiration
Philippe [MS]
Attention pour pouvoir effacer des enregistrements avec un Truncate table, il ne faut pas que des contraintes d'intégrité viennent perturb er l'opération. Une bonne technique pour classer les tables de façon à ne pas avoir ce phénomène est le suivant :
--------------------------------------------------------------------------- ------------------ -- Order all tables (checking dependencies) --------------------------------------------------------------------------- ------------------ DECLARE @MyTable table(TBL_NAME nvarchar(200), TBL_ORDER int) DECLARE @OrderNumber int DECLARE @Continue int
-- Init tables list INSERT INTO @MyTable(TBL_NAME, TBL_ORDER) SELECT name, 0 FROM Sysobjects where type = 'U' AND name <> 'dtproperties'
-- Parse tables to order them SET @OrderNumber = 0 SET @Continue = 1 WHILE @Continue = 1 BEGIN -- Increment order number SET @OrderNumber = @OrderNumber + 1
-- To check dependencies UPDATE @MyTable SET TBL_ORDER = @OrderNumber FROM @MyTable WHERE TBL_ORDER = 0 AND TBL_NAME COLLATE database_default NOT IN ( SELECT DISTINCT s1.name FROM Sysobjects s1 INNER JOIN SysForeignKeys sfk ON s1.id = sfk.fkeyid INNER JOIN Sysobjects s2 ON s2.id = sfk.rkeyid INNER JOIN @MyTable my ON s2.name = my.TBL_NAME COLLATE database_default WHERE s1.type = 'U' AND s2.type = 'U' AND my.TBL_ORDER = 0 AND s1.name <> s2.name )
-- To stop the loop IF NOT EXISTS(SELECT * FROM @MyTable WHERE TBL_ORDER = 0) OR @OrderNumber
100
BEGIN SET @Continue = 0 END END
Avec ceci, lorsque l'on fait par exemple un curseur avec comme source la requête suivante : SELECT TBL_NAME FROM @MyTable ORDER BY TBL_ORDER DESC les tables sont ordonnées en fonction des contraintes d'intégrités.
Phil.
"Sylvain Lafontaine" <sylvain aei ca (fill the blanks, no spam please)> wrote in message news:
Utilisez la commande Truncate table.
S. L.
wrote in message news:14f701c4b408$b89cd340$ > > pour tester sql server, je me suis amuse (non sans mal) a > enregistrer 5 millions de ligne dans une table > > j'ai fait des relations des index etc jusque la ca va > > par exemple j'arrive meme pas a effacer le contenu de la > table avec un delete from matable. j'ai un time out > > ca a l'air d'effacer mais y a une expiration > >
Attention pour pouvoir effacer des enregistrements avec un Truncate table,
il ne faut pas que des contraintes d'intégrité viennent perturb er
l'opération. Une bonne technique pour classer les tables de façon à ne pas
avoir ce phénomène est le suivant :
---------------------------------------------------------------------------
------------------
-- Order all tables (checking dependencies)
---------------------------------------------------------------------------
------------------
DECLARE @MyTable table(TBL_NAME nvarchar(200), TBL_ORDER int)
DECLARE @OrderNumber int
DECLARE @Continue int
-- Init tables list
INSERT INTO @MyTable(TBL_NAME, TBL_ORDER)
SELECT name, 0 FROM Sysobjects where type = 'U' AND name <> 'dtproperties'
-- Parse tables to order them
SET @OrderNumber = 0
SET @Continue = 1
WHILE @Continue = 1
BEGIN
-- Increment order number
SET @OrderNumber = @OrderNumber + 1
-- To check dependencies
UPDATE @MyTable
SET TBL_ORDER = @OrderNumber
FROM @MyTable
WHERE TBL_ORDER = 0 AND TBL_NAME COLLATE database_default NOT IN
(
SELECT DISTINCT s1.name
FROM Sysobjects s1
INNER JOIN SysForeignKeys sfk ON s1.id = sfk.fkeyid
INNER JOIN Sysobjects s2 ON s2.id = sfk.rkeyid
INNER JOIN @MyTable my ON s2.name = my.TBL_NAME COLLATE database_default
WHERE s1.type = 'U' AND s2.type = 'U' AND my.TBL_ORDER = 0 AND s1.name <>
s2.name
)
-- To stop the loop
IF NOT EXISTS(SELECT * FROM @MyTable WHERE TBL_ORDER = 0) OR @OrderNumber
100
BEGIN
SET @Continue = 0
END
END
Avec ceci, lorsque l'on fait par exemple un curseur avec comme source la
requête suivante :
SELECT TBL_NAME FROM @MyTable ORDER BY TBL_ORDER DESC
les tables sont ordonnées en fonction des contraintes d'intégrités.
Phil.
"Sylvain Lafontaine" <sylvain aei ca (fill the blanks, no spam please)>
wrote in message news:OFKgBuAtEHA.2660@TK2MSFTNGP12.phx.gbl...
Utilisez la commande Truncate table.
S. L.
<anonymous@discussions.microsoft.com> wrote in message
news:14f701c4b408$b89cd340$a401280a@phx.gbl...
>
> pour tester sql server, je me suis amuse (non sans mal) a
> enregistrer 5 millions de ligne dans une table
>
> j'ai fait des relations des index etc jusque la ca va
>
> par exemple j'arrive meme pas a effacer le contenu de la
> table avec un delete from matable. j'ai un time out
>
> ca a l'air d'effacer mais y a une expiration
>
>
Attention pour pouvoir effacer des enregistrements avec un Truncate table, il ne faut pas que des contraintes d'intégrité viennent perturb er l'opération. Une bonne technique pour classer les tables de façon à ne pas avoir ce phénomène est le suivant :
--------------------------------------------------------------------------- ------------------ -- Order all tables (checking dependencies) --------------------------------------------------------------------------- ------------------ DECLARE @MyTable table(TBL_NAME nvarchar(200), TBL_ORDER int) DECLARE @OrderNumber int DECLARE @Continue int
-- Init tables list INSERT INTO @MyTable(TBL_NAME, TBL_ORDER) SELECT name, 0 FROM Sysobjects where type = 'U' AND name <> 'dtproperties'
-- Parse tables to order them SET @OrderNumber = 0 SET @Continue = 1 WHILE @Continue = 1 BEGIN -- Increment order number SET @OrderNumber = @OrderNumber + 1
-- To check dependencies UPDATE @MyTable SET TBL_ORDER = @OrderNumber FROM @MyTable WHERE TBL_ORDER = 0 AND TBL_NAME COLLATE database_default NOT IN ( SELECT DISTINCT s1.name FROM Sysobjects s1 INNER JOIN SysForeignKeys sfk ON s1.id = sfk.fkeyid INNER JOIN Sysobjects s2 ON s2.id = sfk.rkeyid INNER JOIN @MyTable my ON s2.name = my.TBL_NAME COLLATE database_default WHERE s1.type = 'U' AND s2.type = 'U' AND my.TBL_ORDER = 0 AND s1.name <> s2.name )
-- To stop the loop IF NOT EXISTS(SELECT * FROM @MyTable WHERE TBL_ORDER = 0) OR @OrderNumber
100
BEGIN SET @Continue = 0 END END
Avec ceci, lorsque l'on fait par exemple un curseur avec comme source la requête suivante : SELECT TBL_NAME FROM @MyTable ORDER BY TBL_ORDER DESC les tables sont ordonnées en fonction des contraintes d'intégrités.
Phil.
"Sylvain Lafontaine" <sylvain aei ca (fill the blanks, no spam please)> wrote in message news:
Utilisez la commande Truncate table.
S. L.
wrote in message news:14f701c4b408$b89cd340$ > > pour tester sql server, je me suis amuse (non sans mal) a > enregistrer 5 millions de ligne dans une table > > j'ai fait des relations des index etc jusque la ca va > > par exemple j'arrive meme pas a effacer le contenu de la > table avec un delete from matable. j'ai un time out > > ca a l'air d'effacer mais y a une expiration > >