Hi experter, jag behöver en skriva att avkorta all användare bordlägger. De har frågat mig för att kopiera prodcutiondben till en testaserver men de önskar att den ska tömma. Att vara kompetent att göra, att jag behöver en skriva som sammanslutningar finna av bordlägger, som hänvisas till, och det truncate av bordlägger. Vi använder sqlserver 2000. Jag har funnit denna skrivar på rengöringsduken för att få bordlägger, som hänvisas till, eller inte i en @r för database. declare bordlägga (nvarchar PK_TABLE (200), nvarchar FK_TABLE (200), primary stämm samla i en klunga (PK_TABLE, FK_TABLE))@rs för
declare bordlägger (nvarchar PK_TABLE (200), nvarchar FK_TABLE (200), primary stämm samla i en klunga (PK_TABLE, FK_TABLE))@t för
declare bordlägger nvarchar (200) inte samla i en klunga ogiltigt primärt nyckel- (för REF_LEVEL int, för TABLE_NAME) @table
declare bordlägger nvarchar (200) inte samla i en klunga ogiltigt primärt nyckel- (för TABLE_NAME) nocountoff
print för set 'laddar bordlägger för databas
insert ”för +db_name () in i @table select TABLE_NAME = a.TABLE_SCHEMA+”. ”a where för +a.TABLE_NAME from INFORMATION_SCHEMA.TABLES a.TABLE_TYPE = ”BASERAR BORDLÄGGER” and a.TABLE_SCHEMA+”. för <>'dbo.dtproperties'< ”'för +a.TABLE_NAME by 1
print för br/>order laddar PK-/FKreferences' insert in i distinct för @r select PK_TABLE = b.TABLE_SCHEMA+”. ”+b.TABLE_NAME, FK_TABLE = c.TABLE_SCHEMA+”. 'on för b för join INFORMATION_SCHEMA.TABLE_CONSTRAINTS för a för +c.TABLE_NAME from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS a.CONSTRAINT_SCHEMA- = b.CONSTRAINT_SCHEMA-and on för c för a.UNIQUE_CONSTRAINT_NAME- = för b.CONSTRAINT_NAME join INFORMATION_SCHEMA.TABLE_CONSTRAINTS a.CONSTRAINT_SCHEMA- = c.CONSTRAINT_SCHEMA-and a.CONSTRAINT_NAME- = för c.CONSTRAINT_NAME order by 1,2
print 'gör för att kopiera av PK-/FKreferences' insert in i by 1,2
print för @r order för * from för för @rs select 'laddar un-hänvisat till bordlägger som jämn 0 ' insert in i @t select REF_LEVEL = 0, in för a where a.TABLE_NAME för a.TABLE_NAME from @table inte ( väljer PK_TABLE från @runion all vald FK_TABLE från @r 1
för order för/>)-- valt * från @r print 'ta bort självreferences' delete från @r where @level för PK_TABLE- = FK_TABLE
declare @levelint set = @level för 0
while < @level för begin för 100 fastställd = @level + trycket 'borttagnings lower jämn borttagnings för references'< sombr/> från where PK_TABLE för @r i or FK_TABLE för för (vald TABLE_NAME från @t) i tryck för
för (vald TABLE_NAME från @t) 'laddar varchar jämn ”+convert ((20), @level) +” mellanlägget för tables'
in i =@level för select REF_LEVEL för @t , @table from för 1
för a.TABLE_NAME för in (vald TABLE_NAME för and a.TABLE_NAME för för in (vald FK_TABLE för where a.TABLE_NAME för a inte från @r) inte från @t) beställer by 1
, om inte finns (valt * från @r)
select REF_LEVEL för br level'>print för end
print för end
för break för 'bordlägger för levels'< för trycket 'för begin för gjort ladda '' för br/> för trycket räkningen av bordlägger vid '', by REF_LEVEL
print för by REF_LEVEL order för @t group för för from för TABLE_COUNT = för räkningen (*) 'bordlägger beställer in vid jämnt och bordlägger name' print ',Notera: Den ogiltiga REF_LEVEL-nayen indikerar möjligheten select b.REF_LEVEL, för br reference'< cirkuläret/>print '' TABLE_NAME = a som för för from för varchar omvänd ((40), a.TABLE_NAME) @table lämnas @tb för join på a.TABLE_NAME- = för b.TABLE_NAME order by b.REF_LEVEL, select b.REF_LEVEL för br Tables'>print för a.TABLE_NAME
print 'bordlägger, och hänvisa till '', TABLE_NAME = den varchar omvänden ((40), a.TABLE_NAME), a för för from för varchar =convert för REFERENCING_TABLE ((40), c.FK_TABLE) @table lämnade @tb för join på a.TABLE_NAME = b.TABLE_NAME som lämnades @rsc /> på a.TABLE_NAME- = för c.PK_TABLE order by a.TABLE_NAME, select b.REF_LEVEL, för br Referenced'>print för c.FK_TABLE
print 'bordlägger och bordlägger '' TABLE_NAME = den varchar omvänden ((40), a.TABLE_NAME), @table a lämnade @tb för join på a.TABLE_NAME = b.TABLE_NAME som lämnades som @rsc för join på a.TABLE_NAME- = för c.FK_TABLE order by a.TABLE_NAME, c.PK_TABLE för from för varchar =convert för TABLE_REFERENCED ((40), c.PK_TABLE)
" klar "
|