Group: microsoft.public.it.sql




Subject: Creazione script CREATE TABLE
From: Andrea Benedetti
Date: 5/1/2007 3:35:29 PM
Salve MadLuke, "MadLuke" <luca2510@hotmail.com> ha scritto nel messaggio news:1177942245.741063.234860@c35g2000hsg.googlegroups.com... >> Qualche giorno fa Andrea ha proposto la seguente >> soluzione:http://groups.google.it/group/microsoft.public.it.sql/browse_thread/t... > > Davvero ottimo! > > > Quelli di creazione indici e primary key invece? > > CREATE NONCLUSTERED INDEX IX_CV_CVSource ON dbo.CV... beccando sia i > clustered che no (divisi per tabella) > > > Spero di non essere troppo pretenzioso... ;-) Puoi ricorrere ancora alle viste di sistema: - INFORMATION_SCHEMA.TABLE_CONSTRAINTS - INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE - INFORMATION_SCHEMA.KEY_COLUMN_USAGE Oppure utilizzare la soluzione (accede alle tabelle di sistema) che Aaron Bertrand (MVP SQL) suggeriva tempo fa. SET NOCOUNT ON CREATE TABLE #indexes ( table_name SYSNAME, index_name SYSNAME, column_name SYSNAME, key_number TINYINT, unique_word VARCHAR(8), drop_commands VARCHAR(255) ) GO INSERT #indexes SELECT table_name = OBJECT_NAME(si.id), index_name = si.name, column_name = col.name, key_number = sik.keyno, unique_word = CASE WHEN INDEXPROPERTY(si.id, si.name, 'isUnique') = 1 THEN 'UNIQUE ' ELSE '' END, drop_commands = 'DROP INDEX '+OBJECT_NAME(si.id)+'.'+si.name FROM syscolumns col INNER JOIN sysindexkeys sik ON sik.id = col.id AND sik.colid = col.colid INNER JOIN sysindexes si ON si.id = sik.id AND si.indid = sik.indid WHERE OBJECTPROPERTY(si.id, 'IsMsShipped') = 0 AND INDEXPROPERTY(si.id, si.name, 'isClustered') = 0 AND INDEXPROPERTY(si.id, si.name, 'isStatistics') = 0 ORDER BY table_name, keyno CREATE TABLE #creates ( table_name SYSNAME, index_name SYSNAME, create_commands VARCHAR(1024) ) DECLARE @ctn SYSNAME, @cin SYSNAME, @tn SYSNAME, @in SYSNAME, @cn SYSNAME, @cmd VARCHAR(255), @unique_word VARCHAR(8) SELECT @ctn = '', @cin = '' DECLARE ins CURSOR FOR SELECT table_name, index_name, column_name, unique_word FROM #indexes ORDER BY table_name, key_number OPEN ins FETCH NEXT FROM ins INTO @tn, @in, @cn, @unique_word WHILE (@@FETCH_STATUS = 0) BEGIN IF @tn = @ctn AND @in = @cin BEGIN UPDATE #creates SET create_commands = create_commands + ','+@cn WHERE table_name = @tn AND index_name = @in -- add column END ELSE BEGIN -- new index INSERT #creates VALUES ( @tn, @in, 'CREATE '+@unique_word+'INDEX '+@in+' ON '+@tn+'('+@cn ) SET @ctn = @tn SET @cin = @in END FETCH NEXT FROM ins INTO @tn, @in, @cn, @unique_word END SELECT create_commands = create_commands + ')' FROM #creates CLOSE ins DEALLOCATE ins DROP TABLE #creates DROP TABLE #indexes > Di nuovo, MadLuke. Ciao! -- Andrea Benedetti Microsoft MVP - SQL Server www.absistemi.it - www.ugiss.org http://blogs.ugidotnet.org/ab http://mvp.support.microsoft.com http://italy.mvps.org