Ich versuche, die CREATE-Skripte für vorhandene Tabellen in SQL Server 2008 abzurufen. Ich gehe davon aus, dass ich dies tun kann, indem ich die sys.tables irgendwie abfrage, aber dies gibt mir nicht die CREATE-Skriptdaten zurück.
sql
sql-server
tsql
cweston
quelle
quelle
CREATE TABLE
oder das gesamte andere Gepäck, z. B. Indizes, Relationen, Kontrollbeschränkungen, Auslöser (bei Beibehaltung der Zündreihenfolge!) , ...? Sobald Sie Beziehungen hinzufügen, wird die Reihenfolge der Erstellung kritisch.Antworten:
Möglicherweise ist dies hilfreich für Sie. Dieses Skript generiert Indizes, FKs, PKs und gemeinsame Strukturen für jede Tabelle.
Zum Beispiel -
DDL:
CREATE TABLE [dbo].[WorkOut]( [WorkOutID] [bigint] IDENTITY(1,1) NOT NULL, [TimeSheetDate] [datetime] NOT NULL, [DateOut] [datetime] NOT NULL, [EmployeeID] [int] NOT NULL, [IsMainWorkPlace] [bit] NOT NULL, [DepartmentUID] [uniqueidentifier] NOT NULL, [WorkPlaceUID] [uniqueidentifier] NULL, [TeamUID] [uniqueidentifier] NULL, [WorkShiftCD] [nvarchar](10) NULL, [WorkHours] [real] NULL, [AbsenceCode] [varchar](25) NULL, [PaymentType] [char](2) NULL, [CategoryID] [int] NULL, [Year] AS (datepart(year,[TimeSheetDate])), CONSTRAINT [PK_WorkOut] PRIMARY KEY CLUSTERED ( [WorkOutID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] ALTER TABLE [dbo].[WorkOut] ADD CONSTRAINT [DF__WorkOut__IsMainW__2C1E8537] DEFAULT ((1)) FOR [IsMainWorkPlace] ALTER TABLE [dbo].[WorkOut] WITH CHECK ADD CONSTRAINT [FK_WorkOut_Employee_EmployeeID] FOREIGN KEY([EmployeeID]) REFERENCES [dbo].[Employee] ([EmployeeID]) ALTER TABLE [dbo].[WorkOut] CHECK CONSTRAINT [FK_WorkOut_Employee_EmployeeID]
Abfrage:
DECLARE @table_name SYSNAME SELECT @table_name = 'dbo.WorkOut' DECLARE @object_name SYSNAME , @object_id INT SELECT @object_name = '[' + s.name + '].[' + o.name + ']' , @object_id = o.[object_id] FROM sys.objects o WITH (NOWAIT) JOIN sys.schemas s WITH (NOWAIT) ON o.[schema_id] = s.[schema_id] WHERE s.name + '.' + o.name = @table_name AND o.[type] = 'U' AND o.is_ms_shipped = 0 DECLARE @SQL NVARCHAR(MAX) = '' ;WITH index_column AS ( SELECT ic.[object_id] , ic.index_id , ic.is_descending_key , ic.is_included_column , c.name FROM sys.index_columns ic WITH (NOWAIT) JOIN sys.columns c WITH (NOWAIT) ON ic.[object_id] = c.[object_id] AND ic.column_id = c.column_id WHERE ic.[object_id] = @object_id ), fk_columns AS ( SELECT k.constraint_object_id , cname = c.name , rcname = rc.name FROM sys.foreign_key_columns k WITH (NOWAIT) JOIN sys.columns rc WITH (NOWAIT) ON rc.[object_id] = k.referenced_object_id AND rc.column_id = k.referenced_column_id JOIN sys.columns c WITH (NOWAIT) ON c.[object_id] = k.parent_object_id AND c.column_id = k.parent_column_id WHERE k.parent_object_id = @object_id ) SELECT @SQL = 'CREATE TABLE ' + @object_name + CHAR(13) + '(' + CHAR(13) + STUFF(( SELECT CHAR(9) + ', [' + c.name + '] ' + CASE WHEN c.is_computed = 1 THEN 'AS ' + cc.[definition] ELSE UPPER(tp.name) + CASE WHEN tp.name IN ('varchar', 'char', 'varbinary', 'binary', 'text') THEN '(' + CASE WHEN c.max_length = -1 THEN 'MAX' ELSE CAST(c.max_length AS VARCHAR(5)) END + ')' WHEN tp.name IN ('nvarchar', 'nchar', 'ntext') THEN '(' + CASE WHEN c.max_length = -1 THEN 'MAX' ELSE CAST(c.max_length / 2 AS VARCHAR(5)) END + ')' WHEN tp.name IN ('datetime2', 'time2', 'datetimeoffset') THEN '(' + CAST(c.scale AS VARCHAR(5)) + ')' WHEN tp.name = 'decimal' THEN '(' + CAST(c.[precision] AS VARCHAR(5)) + ',' + CAST(c.scale AS VARCHAR(5)) + ')' ELSE '' END + CASE WHEN c.collation_name IS NOT NULL THEN ' COLLATE ' + c.collation_name ELSE '' END + CASE WHEN c.is_nullable = 1 THEN ' NULL' ELSE ' NOT NULL' END + CASE WHEN dc.[definition] IS NOT NULL THEN ' DEFAULT' + dc.[definition] ELSE '' END + CASE WHEN ic.is_identity = 1 THEN ' IDENTITY(' + CAST(ISNULL(ic.seed_value, '0') AS CHAR(1)) + ',' + CAST(ISNULL(ic.increment_value, '1') AS CHAR(1)) + ')' ELSE '' END END + CHAR(13) FROM sys.columns c WITH (NOWAIT) JOIN sys.types tp WITH (NOWAIT) ON c.user_type_id = tp.user_type_id LEFT JOIN sys.computed_columns cc WITH (NOWAIT) ON c.[object_id] = cc.[object_id] AND c.column_id = cc.column_id LEFT JOIN sys.default_constraints dc WITH (NOWAIT) ON c.default_object_id != 0 AND c.[object_id] = dc.parent_object_id AND c.column_id = dc.parent_column_id LEFT JOIN sys.identity_columns ic WITH (NOWAIT) ON c.is_identity = 1 AND c.[object_id] = ic.[object_id] AND c.column_id = ic.column_id WHERE c.[object_id] = @object_id ORDER BY c.column_id FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, CHAR(9) + ' ') + ISNULL((SELECT CHAR(9) + ', CONSTRAINT [' + k.name + '] PRIMARY KEY (' + (SELECT STUFF(( SELECT ', [' + c.name + '] ' + CASE WHEN ic.is_descending_key = 1 THEN 'DESC' ELSE 'ASC' END FROM sys.index_columns ic WITH (NOWAIT) JOIN sys.columns c WITH (NOWAIT) ON c.[object_id] = ic.[object_id] AND c.column_id = ic.column_id WHERE ic.is_included_column = 0 AND ic.[object_id] = k.parent_object_id AND ic.index_id = k.unique_index_id FOR XML PATH(N''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '')) + ')' + CHAR(13) FROM sys.key_constraints k WITH (NOWAIT) WHERE k.parent_object_id = @object_id AND k.[type] = 'PK'), '') + ')' + CHAR(13) + ISNULL((SELECT ( SELECT CHAR(13) + 'ALTER TABLE ' + @object_name + ' WITH' + CASE WHEN fk.is_not_trusted = 1 THEN ' NOCHECK' ELSE ' CHECK' END + ' ADD CONSTRAINT [' + fk.name + '] FOREIGN KEY(' + STUFF(( SELECT ', [' + k.cname + ']' FROM fk_columns k WHERE k.constraint_object_id = fk.[object_id] FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + ')' + ' REFERENCES [' + SCHEMA_NAME(ro.[schema_id]) + '].[' + ro.name + '] (' + STUFF(( SELECT ', [' + k.rcname + ']' FROM fk_columns k WHERE k.constraint_object_id = fk.[object_id] FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + ')' + CASE WHEN fk.delete_referential_action = 1 THEN ' ON DELETE CASCADE' WHEN fk.delete_referential_action = 2 THEN ' ON DELETE SET NULL' WHEN fk.delete_referential_action = 3 THEN ' ON DELETE SET DEFAULT' ELSE '' END + CASE WHEN fk.update_referential_action = 1 THEN ' ON UPDATE CASCADE' WHEN fk.update_referential_action = 2 THEN ' ON UPDATE SET NULL' WHEN fk.update_referential_action = 3 THEN ' ON UPDATE SET DEFAULT' ELSE '' END + CHAR(13) + 'ALTER TABLE ' + @object_name + ' CHECK CONSTRAINT [' + fk.name + ']' + CHAR(13) FROM sys.foreign_keys fk WITH (NOWAIT) JOIN sys.objects ro WITH (NOWAIT) ON ro.[object_id] = fk.referenced_object_id WHERE fk.parent_object_id = @object_id FOR XML PATH(N''), TYPE).value('.', 'NVARCHAR(MAX)')), '') + ISNULL(((SELECT CHAR(13) + 'CREATE' + CASE WHEN i.is_unique = 1 THEN ' UNIQUE' ELSE '' END + ' NONCLUSTERED INDEX [' + i.name + '] ON ' + @object_name + ' (' + STUFF(( SELECT ', [' + c.name + ']' + CASE WHEN c.is_descending_key = 1 THEN ' DESC' ELSE ' ASC' END FROM index_column c WHERE c.is_included_column = 0 AND c.index_id = i.index_id FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + ')' + ISNULL(CHAR(13) + 'INCLUDE (' + STUFF(( SELECT ', [' + c.name + ']' FROM index_column c WHERE c.is_included_column = 1 AND c.index_id = i.index_id FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + ')', '') + CHAR(13) FROM sys.indexes i WITH (NOWAIT) WHERE i.[object_id] = @object_id AND i.is_primary_key = 0 AND i.[type] = 2 FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ), '') PRINT @SQL --EXEC sys.sp_executesql @SQL
Ausgabe:
CREATE TABLE [dbo].[WorkOut] ( [WorkOutID] BIGINT NOT NULL IDENTITY(1,1) , [TimeSheetDate] DATETIME NOT NULL , [DateOut] DATETIME NOT NULL , [EmployeeID] INT NOT NULL , [IsMainWorkPlace] BIT NOT NULL DEFAULT((1)) , [DepartmentUID] UNIQUEIDENTIFIER NOT NULL , [WorkPlaceUID] UNIQUEIDENTIFIER NULL , [TeamUID] UNIQUEIDENTIFIER NULL , [WorkShiftCD] NVARCHAR(10) COLLATE Cyrillic_General_CI_AS NULL , [WorkHours] REAL NULL , [AbsenceCode] VARCHAR(25) COLLATE Cyrillic_General_CI_AS NULL , [PaymentType] CHAR(2) COLLATE Cyrillic_General_CI_AS NULL , [CategoryID] INT NULL , [Year] AS (datepart(year,[TimeSheetDate])) , CONSTRAINT [PK_WorkOut] PRIMARY KEY ([WorkOutID] ASC) ) ALTER TABLE [dbo].[WorkOut] WITH CHECK ADD CONSTRAINT [FK_WorkOut_Employee_EmployeeID] FOREIGN KEY([EmployeeID]) REFERENCES [dbo].[Employee] ([EmployeeID]) ALTER TABLE [dbo].[WorkOut] CHECK CONSTRAINT [FK_WorkOut_Employee_EmployeeID] CREATE NONCLUSTERED INDEX [IX_WorkOut_WorkShiftCD_AbsenceCode] ON [dbo].[WorkOut] ([WorkShiftCD] ASC, [AbsenceCode] ASC) INCLUDE ([WorkOutID], [WorkHours])
Überprüfen Sie auch diesen Artikel -
So generieren Sie ein CREATE TABLE-Skript für eine vorhandene Tabelle: Teil 1
quelle
quotename()
anstelle von'[' + thing + ']'
Wollen Sie damit ein TSQL-Skript erstellen, das ein CREATE-Skript generiert, oder die Verwaltungstools in SQL SERVER Management Studio verwenden, um ein Erstellungsskript zu generieren?
Wenn es das letztere ist, müssen Sie nur mit der rechten Maustaste auf eine Tabelle klicken und Skripttabelle auswählen als -> Erstellen an -> Neues Abfragefenster.
Wenn Sie möchten, dass die gesamte Datenbank mit Skripten versehen wird, klicken Sie mit der rechten Maustaste auf die Datenbank und wählen Sie Aufgaben -> Skripte generieren ... und folgen Sie dann dem Assistenten
Ansonsten geht es darum, aus den verschiedenen Systemtabellen alle möglichen lustigen Dinge auszuwählen.
quelle
Mir ist klar, dass diese Frage alt ist, aber sie ist kürzlich bei einer Suche aufgetaucht, die ich gerade durchgeführt habe. Daher dachte ich, ich würde eine Alternative zu der obigen Antwort veröffentlichen.
Wenn Sie
create
Skripts programmgesteuert in .Net generieren möchten, empfehle ich dringend, sich mit Server Management Objects (SMO) oder Distributed Management Objects (DMO) zu befassen - je nachdem, welche Version von SQL Server Sie verwenden (erstere ist 2005+). letztere 2000). Mit diesen Bibliotheken ist das Erstellen von Skripten für eine Tabelle so einfach wie:Hier ist ein Blog-Beitrag mit weiteren Informationen.
quelle
Versuchen Sie sp_helptext Äquivalent für Tabellen?
quelle
"Am einfachsten ist es, die integrierte Funktion von SQL Management Studio zu verwenden", aber ... ich habe sie mit einer Funktion und einigen Prozeduren gelöst. Um beispielsweise die Erstellungs-Tabelle für eine Tabelle mit dem Namen 'table_name' zu erhalten, müssen Sie nur die Prozedur sp_ppinScriptTabla ausführen:
Hier ist der tsql-Skriptcode:
Use Master GO Create Function sp_ppinTipoLongitud ( @xtype int, @length int, @isnullable int ) Returns Varchar(512) As Begin -- Función que a partir de un tipo de datos y una logitud, devuelve el texto del tipo. -- Por ejemplo: para xtype=varchar y length=10 devolverá "varchar(10)" Declare @ret varchar(512) Set @ret = '' Select @ret = t.name + Case When name in ('varchar', 'nvarchar', 'char', 'nchar') Then '(' + Convert(varchar, @length) + ')' Else '' End + ' ' + Case @isnullable When 1 Then 'NULL' Else 'NOT NULL' End From systypes t Where t.xtype = @xtype Return @ret End GO Create Procedure sp_ppinScriptLlavesForaneas ( @vchTabla sysname, @vchResultado varchar(8000) output ) AS Begin DECLARE @tmpFK table( TablaF sysname, TablaR sysname, ColF sysname, ColR sysname, FKName sysname) -- obtengo las llaves foraneas en @vchForeign Declare @vchForeign varchar(8000), @FKName sysname, @vchColumnasF varchar(4000), @vchColumnasR varchar(4000), @ColF sysname, @ColR sysname Declare @vchTemp varchar(1000), @TablaR sysname Insert into @tmpFK Select TablaF.name AS TablaF, TablaR.name AS TablaR, ColF.name AS ColF, ColR.name AS ColR, ofk.name AS FKName From sysforeignkeys fk, sysobjects ofk, sysobjects TablaF, sysobjects TablaR, syscolumns ColF, syscolumns ColR Where TablaF.name = @vchTabla And ofk.id = fk.constid And TablaF.id = fk.fkeyid And TablaR.id = fk.rkeyid And ColF.id = TablaF.id And ColF.colid = fk.fkey And ColR.id = TablaR.id And ColR.colid = fk.rkey order by FKName Set @vchForeign = '' While Exists ( Select * From @tmpFK ) Begin Select Top 1 @FKName = FKName From @tmpFK Set @vchColumnasF = '' Set @vchColumnasR = '' While Exists ( Select * From @tmpFK Where FKName = @FKName ) Begin Select Top 1 @ColF = ColF, @ColR = ColR, @TablaR = TablaR From @tmpFK Where FKName = @FKName Delete From @tmpFK Where ColF = @ColF And ColR = @ColR And TablaR = @TablaR And FKName = @FKName Set @vchColumnasF = @vchColumnasF + @ColF + ', ' Set @vchColumnasR = @vchColumnasR + @ColR + ', ' End Set @vchColumnasF = LEFT(@vchColumnasF, LEN(@vchColumnasF) - 1) Set @vchColumnasR = LEFT(@vchColumnasR, LEN(@vchColumnasR) - 1) Set @vchTemp = 'Constraint ' + @FKName + ' Foreign Key (' + @vchColumnasF + ') ' Set @vchTemp = @vchTemp + 'References ' + @TablaR + ' (' + @vchColumnasR + ')' Set @vchForeign = @vchForeign + char(9) + @vchTemp + ',' + char(13) End Select @vchResultado = Case When Len(@vchForeign) >=2 Then Left(@vchForeign, Len(@vchForeign) - 2) Else @vchForeign End End GO Create Procedure sp_ppinScriptTabla ( @vchTabla sysname ) AS Set nocount on -- Obtengo las foreign keys Declare @foreign varchar(8000) Exec sp_ppinScriptLlavesForaneas @vchTabla, @foreign output -- SELECT que devuelve el script de Create Table de la tabla Select 'Create ' + Case o.xtype When 'U' Then 'Table' When 'P' Then 'Procedure' Else '??' End + ' ' + @vchTabla + char(13) + '(' From sysobjects o Where o.name = @vchTabla Union all -- Campos + identitys + DEFAULTS select char(9) + c.name + ' ' + -- Nombre dbo.sp_ppinTipoLongitud(t.xtype, c.length, c.isnullable) + -- Tipo(longitud) Case When c.colstat & 1 = 1 -- Identity (si aplica) Then ' Identity(' + convert(varchar, ident_seed(@vchTabla)) + ',' + Convert(varchar, ident_incr(@vchTabla)) + ')' Else '' End + Case When not od.name is null -- Defaults (si aplica) Then ' Constraint ' + od.name + ' Default ' + replace(replace(cd.text, '((', '('), '))', ')') Else '' End + ', ' from sysobjects o, syscolumns c LEFT OUTER JOIN sysobjects od On od.id = c.cdefault LEFT OUTER join syscomments cd On cd.id = od.id, systypes t where o.id = object_id(@vchTabla) and o.id = c.id and c.xtype = t.xtype Union all -- Primary Keys y Unique keys select char(9) + 'Constraint ' + o.name + ' ' + Case o.xtype When 'PK' Then 'Primary Key' Else 'Unique' End + ' ' + dbo.sp_ppinCamposIndice (db_name(), @vchTabla, i.indid) + ', ' from sysobjects o, sysindexes i where o.parent_obj = object_id(@vchTabla) and o.xtype in ('PK','UQ') and i.id = o.parent_obj and o.name = i.name Union all -- Check constraints select char(9) + 'Constraint ' + o.name + ' Check ' + c.text + ', ' from sysobjects o, syscomments c where o.parent_obj = object_id(@vchTabla) and o.xtype in ('C') and o.id = c.id Union all -- Foreign keys Select @foreign Union all Select ')' Set nocount off GO
quelle
Sie haben vergessen, die gespeicherte Prozedur oder das Funktionsskript für einzuschließen
sp_ppinCamposIndice
quelle
Zuallererst liebe ich das von devart geschriebene Skript und wollte es verwenden, aber ich habe einige Einschränkungen gefunden, also habe ich beschlossen, es zu verbessern:
Ich hatte keine Zeit, es richtig zu testen, und ich habe es nur unter SQL Server 2012/4 getestet
Die nächste Version wird die Generierung von FKs ändern, da diese am Ende hinzugefügt werden müssen. Andernfalls können sie fehlschlagen.
Jeder Kommentar wird geschätzt.
set transaction isolation level read uncommitted; SET NOCOUNT ON; SET STATISTICS TIME OFF; SET STATISTICS IO OFF; -- http://stackoverflow.com/questions/12639948/sql-nvarchar-and-varchar-limits --NB: Crazy table can still have truncation at 4000 because of unexpected number of indexes or other very long list of columns/defaults etc -- triggers are not supported -- xml indexes are not supported DECLARE @Tables table(id int identity(1,1), [name] sysname); insert into @Tables([name]) values ('<yourSchema>.<youTableName>') ,('<yourSchema2>.<youTableName2>') ; DECLARE @object_id int; DECLARE @SourceDatabase nvarchar(max) = N'SourceTest'; --this is used only by the insert DECLARE @TargetDatabase nvarchar(max) = N'DescTest'; --this is used only by the insert and USE <DBName> --- options --- DECLARE @UseTransaction bit = 0; DECLARE @GenerateUseDatabase bit = 0; DECLARE @GenerateFKs bit = 1; DECLARE @GenerateIdentity bit = 1; DECLARE @GenerateCollation bit = 0; DECLARE @GenerateCreateTable bit = 1; DECLARE @GenerateIndexes bit = 1; DECLARE @GenerateConstraints bit = 1; DECLARE @GenerateKeyConstraints bit = 1; DECLARE @GenerateConstraintNameOfDefaults bit = 1; DECLARE @GenerateDropIfItExists bit = 1; DECLARE @GenerateDropFKIfItExists bit = 0; DECLARE @GenerateDelete bit = 0; DECLARE @GenerateInsertInto bit = 0; DECLARE @GenerateIdentityInsert int = 0; --0 ignore set,but add column; 1 generate; 2 ignore set and column DECLARE @GenerateSetNoCount int = 2; --0 ignore set,1=set on, 2=set off DECLARE @GenerateMessages bit = 1; --print with no wait DECLARE @GenerateDataCompressionOptions bit = 1; --TODO: generates the compression option only of the table, not the indexes --NB: the compression options reflects the design value. --The actual compression of a the page is saved here --SELECT * from sys.dm_db_database_page_allocations(DB_ID(), @object_ID, 0, 1, 'DETAILED') ----------------------------------------------------------------------------- ------------------------------------------------------------------------------ --- Let's play DECLARE @DataTypeSpacer int = 45; --this is just to improve the formatting of the script ... DECLARE @name sysname; DECLARE @SQL NVARCHAR(MAX) = N'' DECLARE db_cursor CURSOR FOR SELECT [name] from @Tables OPEN db_cursor FETCH NEXT FROM db_cursor INTO @name WHILE @@FETCH_STATUS = 0 BEGIN SET @object_id = object_ID(@name) goto CreateScript; backFromCreateScript: FETCH NEXT FROM db_cursor INTO @name END CLOSE db_cursor DEALLOCATE db_cursor return; CreateScript: DECLARE @CR NVARCHAR(max) = NCHAR(13); DECLARE @TB NVARCHAR(max) = NCHAR(9); DECLARE @CurrentIndent nvarchar(max) = '' ;WITH index_column AS ( SELECT ic.[object_id] , ic.index_id , ic.is_descending_key , ic.is_included_column , c.name FROM sys.index_columns ic WITH (NOWAIT) JOIN sys.columns c WITH (NOWAIT) ON ic.[object_id] = c.[object_id] AND ic.column_id = c.column_id WHERE ic.[object_id] = @object_id ), fk_columns AS ( SELECT k.constraint_object_id , cname = c.name , rcname = rc.name FROM sys.foreign_key_columns k WITH (NOWAIT) JOIN sys.columns rc WITH (NOWAIT) ON rc.[object_id] = k.referenced_object_id AND rc.column_id = k.referenced_column_id JOIN sys.columns c WITH (NOWAIT) ON c.[object_id] = k.parent_object_id AND c.column_id = k.parent_column_id WHERE k.parent_object_id = @object_id and @GenerateFKs = 1 ) SELECT @SQL = -------------------- USE DATABASE -------------------------------------------------------------------------------------------------- CAST( CASE WHEN @GenerateUseDatabase = 1 THEN N'USE ' + @TargetDatabase + N';' + @CR ELSE N'' END as nvarchar(max)) + -------------------- SET NOCOUNT -------------------------------------------------------------------------------------------------- CAST( CASE @GenerateSetNoCount WHEN 1 THEN N'SET NOCOUNT ON;' + @CR WHEN 2 THEN N'SET NOCOUNT OFF;' + @CR ELSE N'' END as nvarchar(max)) + -------------------- USE TRANSACTION -------------------------------------------------------------------------------------------------- CAST( CASE WHEN @UseTransaction = 1 THEN N'SET XACT_ABORT ON' + @CR + N'BEGIN TRY' + @CR + N'BEGIN TRAN' + @CR ELSE N'' END as nvarchar(max)) + -------------------- DROP SYNONYM -------------------------------------------------------------------------------------------------- CASE WHEN @GenerateDropIfItExists = 1 THEN CAST( N'IF OBJECT_ID(''' + quotename(OBJECT_schema_name(@object_id)) + N'.' + quotename(OBJECT_NAME(@object_id)) + N''',''SN'') IS NOT NULL DROP SYNONYM ' + quotename(OBJECT_schema_name(@object_id)) + N'.' + quotename(OBJECT_NAME(@object_id)) + N';' + @CR as nvarchar(max)) ELSE CAST( N'' as nvarchar(max)) END + -------------------- DROP IS Exists -------------------------------------------------------------------------------------------------- CASE WHEN @GenerateDropIfItExists = 1 THEN --Drop table if exists CAST( N'IF OBJECT_ID(''' + quotename(OBJECT_schema_name(@object_id)) + N'.' + quotename(OBJECT_NAME(@object_id)) + N''',''U'') IS NOT NULL DROP TABLE ' + quotename(OBJECT_schema_name(@object_id)) + N'.' + quotename(OBJECT_NAME(@object_id)) + N';' + @CR as nvarchar(max)) + @CR ELSE N'' END + -------------------- DROP IS Exists -------------------------------------------------------------------------------------------------- CAST((CASE WHEN @GenerateMessages = 1 and @GenerateDropFKIfItExists = 1 THEN N'RAISERROR(''DROP CONSTRAINTS OF %s'',10,1, ''' + quotename(OBJECT_schema_name(@object_id)) + N'.' + quotename(OBJECT_NAME(@object_id)) + N''') WITH NOWAIT;' + @CR ELSE N'' END) as nvarchar(max)) + CASE WHEN @GenerateDropFKIfItExists = 1 THEN --Drop foreign keys ISNULL((( SELECT CAST( N'ALTER TABLE ' + quotename(s.name) + N'.' + quotename(t.name) + N' DROP CONSTRAINT ' + RTRIM(f.name) + N';' + @CR as nvarchar(max)) FROM sys.tables t INNER JOIN sys.foreign_keys f ON f.parent_object_id = t.object_id INNER JOIN sys.schemas s ON s.schema_id = f.schema_id WHERE f.referenced_object_id = @object_id FOR XML PATH(N''), TYPE).value(N'.', N'NVARCHAR(MAX)')) ,N'') + @CR ELSE N'' END + --------------------- CREATE TABLE ----------------------------------------------------------------------------------------------------------------- CAST((CASE WHEN @GenerateMessages = 1 THEN N'RAISERROR(''CREATE TABLE %s'',10,1, ''' + quotename(OBJECT_schema_name(@object_id)) + N'.' + quotename(OBJECT_NAME(@object_id)) + N''') WITH NOWAIT;' + @CR ELSE N'' END) as nvarchar(max)) + CASE WHEN @GenerateCreateTable = 1 THEN CAST( N'CREATE TABLE ' + quotename(OBJECT_schema_name(@object_id)) + N'.' + quotename(OBJECT_NAME(@object_id)) + @CR + N'(' + @CR + STUFF(( SELECT CAST( @TB + N',' + quotename(c.name) + N' ' + ISNULL(replicate(' ',@DataTypeSpacer - len(quotename(c.name))),'') --isnull(replicate) then len(quotename(c.name)) > @DataTypeSpacer + CASE WHEN c.is_computed = 1 THEN N' AS ' + cc.[definition] ELSE UPPER(tp.name) + CASE WHEN tp.name IN (N'varchar', N'char', N'varbinary', N'binary', N'text') THEN N'(' + CASE WHEN c.max_length = -1 THEN N'MAX' ELSE CAST(c.max_length AS NVARCHAR(5)) END + N')' WHEN tp.name IN (N'nvarchar', N'nchar', N'ntext') THEN N'(' + CASE WHEN c.max_length = -1 THEN N'MAX' ELSE CAST(c.max_length / 2 AS NVARCHAR(5)) END + N')' WHEN tp.name IN (N'datetime2', N'time2', N'datetimeoffset') THEN N'(' + CAST(c.scale AS NVARCHAR(5)) + N')' WHEN tp.name = N'decimal' THEN N'(' + CAST(c.[precision] AS NVARCHAR(5)) + N',' + CAST(c.scale AS NVARCHAR(5)) + N')' ELSE N'' END + CASE WHEN c.collation_name IS NOT NULL and @GenerateCollation = 1 THEN N' COLLATE ' + c.collation_name ELSE N'' END + CASE WHEN c.is_nullable = 1 THEN N' NULL' ELSE N' NOT NULL' END + CASE WHEN dc.[definition] IS NOT NULL THEN CASE WHEN @GenerateConstraintNameOfDefaults = 1 THEN N' CONSTRAINT ' + quotename(dc.name) ELSE N'' END + N' DEFAULT' + dc.[definition] ELSE N'' END + CASE WHEN ic.is_identity = 1 and @GenerateIdentity = 1 THEN N' IDENTITY(' + CAST(ISNULL(ic.seed_value, N'0') AS NCHAR(1)) + N',' + CAST(ISNULL(ic.increment_value, N'1') AS NCHAR(1)) + N')' ELSE N'' END END + @CR AS nvarchar(Max)) FROM sys.columns c WITH (NOWAIT) INNER JOIN sys.types tp WITH (NOWAIT) ON c.user_type_id = tp.user_type_id LEFT JOIN sys.computed_columns cc WITH (NOWAIT) ON c.[object_id] = cc.[object_id] AND c.column_id = cc.column_id LEFT JOIN sys.default_constraints dc WITH (NOWAIT) ON c.default_object_id != 0 AND c.[object_id] = dc.parent_object_id AND c.column_id = dc.parent_column_id LEFT JOIN sys.identity_columns ic WITH (NOWAIT) ON c.is_identity = 1 AND c.[object_id] = ic.[object_id] AND c.column_id = ic.column_id WHERE c.[object_id] = @object_id ORDER BY c.column_id FOR XML PATH(N''), TYPE).value(N'.', N'NVARCHAR(MAX)'), 1, 2, @TB + N' ') as nvarchar(max)) ELSE CAST('' as nvarchar(max)) end + ---------------------- Key Constraints ---------------------------------------------------------------- CAST( case when @GenerateKeyConstraints <> 1 THEN N'' ELSE ISNULL((SELECT @TB + N', CONSTRAINT ' + quotename(k.name) + N' PRIMARY KEY ' + ISNULL(kidx.type_desc, N'') + N'(' + (SELECT STUFF(( SELECT N', ' + quotename(c.name) + N' ' + CASE WHEN ic.is_descending_key = 1 THEN N'DESC' ELSE N'ASC' END FROM sys.index_columns ic WITH (NOWAIT) JOIN sys.columns c WITH (NOWAIT) ON c.[object_id] = ic.[object_id] AND c.column_id = ic.column_id WHERE ic.is_included_column = 0 AND ic.[object_id] = k.parent_object_id AND ic.index_id = k.unique_index_id FOR XML PATH(N''), TYPE).value(N'.', N'NVARCHAR(MAX)'), 1, 2, N'')) + N')' + @CR FROM sys.key_constraints k WITH (NOWAIT) LEFT JOIN sys.indexes kidx ON k.parent_object_id = kidx.object_id and k.unique_index_id = kidx.index_id WHERE k.parent_object_id = @object_id AND k.[type] = N'PK'), N'') + N')' + @CR END as nvarchar(max)) + CAST( CASE WHEN @GenerateDataCompressionOptions = 1 AND (SELECT top 1 data_compression_desc from sys.partitions where object_ID = @object_id and index_id = 1) <> N'NONE' THEN N'WITH (DATA_COMPRESSION=' + (SELECT top 1 data_compression_desc from sys.partitions where object_ID = @object_id and index_id = 1) + N')' + @CR ELSE N'' + @CR END as nvarchar(max)) + --------------------- FOREIGN KEYS ----------------------------------------------------------------------------------------------------------------- CAST((CASE WHEN @GenerateMessages = 1 and @GenerateDropFKIfItExists = 1 THEN N'RAISERROR(''CREATING FK OF %s'',10,1, ''' + quotename(OBJECT_schema_name(@object_id)) + N'.' + quotename(OBJECT_NAME(@object_id)) + N''') WITH NOWAIT;' + @CR ELSE N'' END) as nvarchar(max)) + CAST( ISNULL((SELECT ( SELECT @CR + N'ALTER TABLE ' + + quotename(OBJECT_schema_name(@object_id)) + N'.' + quotename(OBJECT_NAME(@object_id)) + + N' WITH' + CASE WHEN fk.is_not_trusted = 1 THEN N' NOCHECK' ELSE N' CHECK' END + N' ADD CONSTRAINT ' + quotename(fk.name) + N' FOREIGN KEY(' + STUFF(( SELECT N', ' + quotename(k.cname) + N'' FROM fk_columns k WHERE k.constraint_object_id = fk.[object_id] FOR XML PATH(N''), TYPE).value(N'.', N'NVARCHAR(MAX)'), 1, 2, N'') + N')' + N' REFERENCES ' + quotename(SCHEMA_NAME(ro.[schema_id])) + N'.' + quotename(ro.name) + N' (' + STUFF(( SELECT N', ' + quotename(k.rcname) + N'' FROM fk_columns k WHERE k.constraint_object_id = fk.[object_id] FOR XML PATH(N''), TYPE).value(N'.', N'NVARCHAR(MAX)'), 1, 2, N'') + N')' + CASE WHEN fk.delete_referential_action = 1 THEN N' ON DELETE CASCADE' WHEN fk.delete_referential_action = 2 THEN N' ON DELETE SET NULL' WHEN fk.delete_referential_action = 3 THEN N' ON DELETE SET DEFAULT' ELSE N'' END + CASE WHEN fk.update_referential_action = 1 THEN N' ON UPDATE CASCADE' WHEN fk.update_referential_action = 2 THEN N' ON UPDATE SET NULL' WHEN fk.update_referential_action = 3 THEN N' ON UPDATE SET DEFAULT' ELSE N'' END + @CR + N'ALTER TABLE ' + + quotename(OBJECT_schema_name(@object_id)) + N'.' + quotename(OBJECT_NAME(@object_id)) + + N' CHECK CONSTRAINT ' + quotename(fk.name) + N'' + @CR FROM sys.foreign_keys fk WITH (NOWAIT) JOIN sys.objects ro WITH (NOWAIT) ON ro.[object_id] = fk.referenced_object_id WHERE fk.parent_object_id = @object_id FOR XML PATH(N''), TYPE).value(N'.', N'NVARCHAR(MAX)')), N'') as nvarchar(max)) + --------------------- INDEXES ---------------------------------------------------------------------------------------------------------- CAST((CASE WHEN @GenerateMessages = 1 and @GenerateIndexes = 1 THEN N'RAISERROR(''CREATING INDEXES OF %s'',10,1, ''' + quotename(OBJECT_schema_name(@object_id)) + N'.' + quotename(OBJECT_NAME(@object_id)) + N''') WITH NOWAIT;' + @CR ELSE N'' END) as nvarchar(max)) + case when @GenerateIndexes = 1 THEN CAST( ISNULL(((SELECT @CR + N'CREATE' + CASE WHEN i.is_unique = 1 THEN N' UNIQUE ' ELSE N' ' END + i.type_desc + N' INDEX ' + quotename(i.name) + N' ON ' + + quotename(OBJECT_schema_name(@object_id)) + N'.' + quotename(OBJECT_NAME(@object_id)) + + N' (' + STUFF(( SELECT N', ' + quotename(c.name) + N'' + CASE WHEN c.is_descending_key = 1 THEN N' DESC' ELSE N' ASC' END FROM index_column c WHERE c.is_included_column = 0 AND c.index_id = i.index_id FOR XML PATH(N''), TYPE).value(N'.', N'NVARCHAR(MAX)'), 1, 2, N'') + N')' + ISNULL(@CR + N'INCLUDE (' + STUFF(( SELECT N', ' + quotename(c.name) + N'' FROM index_column c WHERE c.is_included_column = 1 AND c.index_id = i.index_id FOR XML PATH(N''), TYPE).value(N'.', N'NVARCHAR(MAX)'), 1, 2, N'') + N')', N'') + @CR FROM sys.indexes i WITH (NOWAIT) WHERE i.[object_id] = @object_id AND i.is_primary_key = 0 AND i.[type] in (1,2) and @GenerateIndexes = 1 FOR XML PATH(N''), TYPE).value(N'.', N'NVARCHAR(MAX)') ), N'') as nvarchar(max)) ELSE CAST(N'' as nvarchar(max)) END + ------------------------ @GenerateDelete ---------------------------------------------------------- CAST((CASE WHEN @GenerateMessages = 1 and @GenerateDelete = 1 THEN N'RAISERROR(''TRUNCATING %s'',10,1, ''' + quotename(OBJECT_schema_name(@object_id)) + N'.' + quotename(OBJECT_NAME(@object_id)) + N''') WITH NOWAIT;' + @CR ELSE N'' END) as nvarchar(max)) + CASE WHEN @GenerateDelete = 1 THEN CAST( (CASE WHEN exists (SELECT * FROM sys.foreign_keys WHERE referenced_object_id = @object_id) THEN N'DELETE FROM ' + quotename(OBJECT_schema_name(@object_id)) + N'.' + quotename(OBJECT_NAME(@object_id)) + N';' + @CR ELSE N'TRUNCATE TABLE ' + quotename(OBJECT_schema_name(@object_id)) + N'.' + quotename(OBJECT_NAME(@object_id)) + N';' + @CR END) AS NVARCHAR(max)) ELSE CAST(N'' as nvarchar(max)) END + ------------------------- @GenerateInsertInto ---------------------------------------------------------- CAST((CASE WHEN @GenerateMessages = 1 and @GenerateDropFKIfItExists = 1 THEN N'RAISERROR(''INSERTING INTO %s'',10,1, ''' + quotename(OBJECT_schema_name(@object_id)) + N'.' + quotename(OBJECT_NAME(@object_id)) + N''') WITH NOWAIT;' + @CR ELSE N'' END) as nvarchar(max)) + CASE WHEN @GenerateInsertInto = 1 THEN CAST( CASE WHEN EXISTS (SELECT * from sys.columns c where c.[object_id] = @object_id and is_identity = 1) AND @GenerateIdentityInsert = 1 THEN N'SET IDENTITY_INSERT ' + quotename(OBJECT_schema_name(@object_id)) + N'.' + quotename(OBJECT_NAME(@object_id)) + N' ON;' + @CR ELSE CAST('' AS nvarchar(max)) END + N'INSERT INTO ' + QUOTENAME(@TargetDatabase) + N'.' + quotename(OBJECT_schema_name(@object_id)) + N'.' + quotename(OBJECT_NAME(@object_id)) + N'(' + @CR + ( @TB + N' ' + SUBSTRING( ( SELECT @TB + ','+ quotename(Name) + @CR from sys.columns c where c.[object_id] = @object_id AND system_type_ID <> 189 /*timestamp*/ AND is_computed = 0 and (is_identity = 0 or @GenerateIdentityInsert in (0,1)) FOR XML PATH(N''), TYPE).value(N'.', N'NVARCHAR(MAX)') ,3,99999) ) + N')' + @CR + N'SELECT ' + @CR + ( @TB + N' ' + SUBSTRING( ( SELECT @TB + ','+ quotename(Name) + @CR FROM sys.columns c WHERE c.[object_id] = @object_id and system_type_ID <> 189 /*timestamp*/ and is_computed = 0 and (is_identity = 0 or @GenerateIdentityInsert in (0,1)) FOR XML PATH(N''), TYPE).value(N'.', N'NVARCHAR(MAX)') ,3,99999) ) + N'FROM ' + @SourceDatabase + N'.' + quotename(OBJECT_schema_name(@object_id)) + N'.' + quotename(OBJECT_NAME(@object_id)) + N';' + @CR + CASE WHEN EXISTS (SELECT * from sys.columns c where c.[object_id] = @object_id and is_identity = 1) AND @GenerateIdentityInsert = 1 THEN N'SET IDENTITY_INSERT ' + quotename(OBJECT_schema_name(@object_id)) + N'.' + quotename(OBJECT_NAME(@object_id)) + N' OFF;'+ @CR ELSE CAST('' AS nvarchar(max)) END as nvarchar(max)) ELSE CAST( N'' as nvarchar(max)) END + -------------------- USE TRANSACTION -------------------------------------------------------------------------------------------------- CAST( CASE WHEN @UseTransaction = 1 THEN @CR + N'COMMIT TRAN; ' + @CR + N'END TRY' + @CR + N'BEGIN CATCH' + @CR + N' IF XACT_STATE() IN (-1,1)' + @CR + N' ROLLBACK TRAN;' + @CR + N'' + @CR + N' SELECT ERROR_NUMBER() AS ErrorNumber ' + @CR + N' ,ERROR_SEVERITY() AS ErrorSeverity ' + @CR + N' ,ERROR_STATE() AS ErrorState ' + @CR + N' ,ERROR_PROCEDURE() AS ErrorProcedure ' + @CR + N' ,ERROR_LINE() AS ErrorLine ' + @CR + N' ,ERROR_MESSAGE() AS ErrorMessage; ' + @CR + N'END CATCH' ELSE N'' END as nvarchar(max)) --print is limited to 4000 chars, if necessary, I use multiple print --to maintain the consistency of the script, I split near the closest CrLF to the max chunk size DECLARE @i int = 1; DECLARE @maxChunk integer = 3990; DECLARE @len integer = @maxChunk; WHILE @i < len(@SQL) BEGIN IF len(@SQL) > (@i + @len) set @len = len(substring(@SQL, @i, @maxChunk)) - CHARINDEX(@CR, reverse(substring(@SQL, @i, @len))) + 1 PRINT substring(@SQL, @i, @len) set @i = @i + @len set @len = @maxChunk END --SELECT datalength(@SQL), @sql --EXEC sys.sp_executesql @SQL goto backFromCreateScript;
quelle
Invalid object name 'sys.Tables'.
Irgendwelche Ideen?SELECT * FROM SYS.TABLES
Ich erhalte den gleichen ungültigen Objektnamenfehler wie oben.Hier ist eine kleine Variation der Antwort von @Devart, damit Sie das CREATE-Skript für eine temporäre Tabelle erhalten können.
Bitte beachten Sie, dass die @ SQL-Variable ein
NVARCHAR(MAX)
Datentyp ist und Sie sie möglicherweise nicht nur mit SSMS aus dem Ergebnis kopieren können. In dieser Frage erfahren Sie, wie Sie den vollen Wert eines MAX- Felds erhalten.DECLARE @temptable_objectid INT = OBJECT_ID('tempdb..#Temp'); DECLARE @object_name SYSNAME , @object_id INT SELECT @object_name = '[' + s.name + '].[' + o.name + ']' , @object_id = o.[object_id] FROM tempdb.sys.objects o WITH (NOWAIT) JOIN tempdb.sys.schemas s WITH (NOWAIT) ON o.[schema_id] = s.[schema_id] WHERE object_id = @temptable_objectid DECLARE @SQL NVARCHAR(MAX) = '' ;WITH index_column AS ( SELECT ic.[object_id] , ic.index_id , ic.is_descending_key , ic.is_included_column , c.name FROM tempdb.sys.index_columns ic WITH (NOWAIT) JOIN tempdb.sys.columns c WITH (NOWAIT) ON ic.[object_id] = c.[object_id] AND ic.column_id = c.column_id WHERE ic.[object_id] = @object_id ), fk_columns AS ( SELECT k.constraint_object_id , cname = c.name , rcname = rc.name FROM tempdb.sys.foreign_key_columns k WITH (NOWAIT) JOIN tempdb.sys.columns rc WITH (NOWAIT) ON rc.[object_id] = k.referenced_object_id AND rc.column_id = k.referenced_column_id JOIN tempdb.sys.columns c WITH (NOWAIT) ON c.[object_id] = k.parent_object_id AND c.column_id = k.parent_column_id WHERE k.parent_object_id = @object_id ) SELECT @SQL = 'CREATE TABLE ' + @object_name + CHAR(13) + '(' + CHAR(13) + STUFF(( SELECT CHAR(9) + ', [' + c.name + '] ' + CASE WHEN c.is_computed = 1 THEN 'AS ' + cc.[definition] ELSE UPPER(tp.name) + CASE WHEN tp.name IN ('varchar', 'char', 'varbinary', 'binary', 'text') THEN '(' + CASE WHEN c.max_length = -1 THEN 'MAX' ELSE CAST(c.max_length AS VARCHAR(5)) END + ')' WHEN tp.name IN ('nvarchar', 'nchar', 'ntext') THEN '(' + CASE WHEN c.max_length = -1 THEN 'MAX' ELSE CAST(c.max_length / 2 AS VARCHAR(5)) END + ')' WHEN tp.name IN ('datetime2', 'time2', 'datetimeoffset') THEN '(' + CAST(c.scale AS VARCHAR(5)) + ')' WHEN tp.name = 'decimal' THEN '(' + CAST(c.[precision] AS VARCHAR(5)) + ',' + CAST(c.scale AS VARCHAR(5)) + ')' ELSE '' END + CASE WHEN c.collation_name IS NOT NULL THEN ' COLLATE ' + c.collation_name ELSE '' END + CASE WHEN c.is_nullable = 1 THEN ' NULL' ELSE ' NOT NULL' END + CASE WHEN dc.[definition] IS NOT NULL THEN ' DEFAULT' + dc.[definition] ELSE '' END + CASE WHEN ic.is_identity = 1 THEN ' IDENTITY(' + CAST(ISNULL(ic.seed_value, '0') AS CHAR(1)) + ',' + CAST(ISNULL(ic.increment_value, '1') AS CHAR(1)) + ')' ELSE '' END END + CHAR(13) FROM tempdb.sys.columns c WITH (NOWAIT) JOIN tempdb.sys.types tp WITH (NOWAIT) ON c.user_type_id = tp.user_type_id LEFT JOIN tempdb.sys.computed_columns cc WITH (NOWAIT) ON c.[object_id] = cc.[object_id] AND c.column_id = cc.column_id LEFT JOIN tempdb.sys.default_constraints dc WITH (NOWAIT) ON c.default_object_id != 0 AND c.[object_id] = dc.parent_object_id AND c.column_id = dc.parent_column_id LEFT JOIN tempdb.sys.identity_columns ic WITH (NOWAIT) ON c.is_identity = 1 AND c.[object_id] = ic.[object_id] AND c.column_id = ic.column_id WHERE c.[object_id] = @object_id ORDER BY c.column_id FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, CHAR(9) + ' ') + ISNULL((SELECT CHAR(9) + ', CONSTRAINT [' + k.name + '] PRIMARY KEY (' + (SELECT STUFF(( SELECT ', [' + c.name + '] ' + CASE WHEN ic.is_descending_key = 1 THEN 'DESC' ELSE 'ASC' END FROM tempdb.sys.index_columns ic WITH (NOWAIT) JOIN tempdb.sys.columns c WITH (NOWAIT) ON c.[object_id] = ic.[object_id] AND c.column_id = ic.column_id WHERE ic.is_included_column = 0 AND ic.[object_id] = k.parent_object_id AND ic.index_id = k.unique_index_id FOR XML PATH(N''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '')) + ')' + CHAR(13) FROM tempdb.sys.key_constraints k WITH (NOWAIT) WHERE k.parent_object_id = @object_id AND k.[type] = 'PK'), '') + ')' + CHAR(13) + ISNULL((SELECT ( SELECT CHAR(13) + 'ALTER TABLE ' + @object_name + ' WITH' + CASE WHEN fk.is_not_trusted = 1 THEN ' NOCHECK' ELSE ' CHECK' END + ' ADD CONSTRAINT [' + fk.name + '] FOREIGN KEY(' + STUFF(( SELECT ', [' + k.cname + ']' FROM fk_columns k WHERE k.constraint_object_id = fk.[object_id] FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + ')' + ' REFERENCES [' + SCHEMA_NAME(ro.[schema_id]) + '].[' + ro.name + '] (' + STUFF(( SELECT ', [' + k.rcname + ']' FROM fk_columns k WHERE k.constraint_object_id = fk.[object_id] FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + ')' + CASE WHEN fk.delete_referential_action = 1 THEN ' ON DELETE CASCADE' WHEN fk.delete_referential_action = 2 THEN ' ON DELETE SET NULL' WHEN fk.delete_referential_action = 3 THEN ' ON DELETE SET DEFAULT' ELSE '' END + CASE WHEN fk.update_referential_action = 1 THEN ' ON UPDATE CASCADE' WHEN fk.update_referential_action = 2 THEN ' ON UPDATE SET NULL' WHEN fk.update_referential_action = 3 THEN ' ON UPDATE SET DEFAULT' ELSE '' END + CHAR(13) + 'ALTER TABLE ' + @object_name + ' CHECK CONSTRAINT [' + fk.name + ']' + CHAR(13) FROM tempdb.sys.foreign_keys fk WITH (NOWAIT) JOIN tempdb.sys.objects ro WITH (NOWAIT) ON ro.[object_id] = fk.referenced_object_id WHERE fk.parent_object_id = @object_id FOR XML PATH(N''), TYPE).value('.', 'NVARCHAR(MAX)')), '') + ISNULL(((SELECT CHAR(13) + 'CREATE' + CASE WHEN i.is_unique = 1 THEN ' UNIQUE' ELSE '' END + ' NONCLUSTERED INDEX [' + i.name + '] ON ' + @object_name + ' (' + STUFF(( SELECT ', [' + c.name + ']' + CASE WHEN c.is_descending_key = 1 THEN ' DESC' ELSE ' ASC' END FROM index_column c WHERE c.is_included_column = 0 AND c.index_id = i.index_id FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + ')' + ISNULL(CHAR(13) + 'INCLUDE (' + STUFF(( SELECT ', [' + c.name + ']' FROM index_column c WHERE c.is_included_column = 1 AND c.index_id = i.index_id FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + ')', '') + CHAR(13) FROM tempdb.sys.indexes i WITH (NOWAIT) WHERE i.[object_id] = @object_id AND i.is_primary_key = 0 AND i.[type] = 2 FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ), '') SELECT @SQL
quelle
Am einfachsten ist es, die integrierte Funktion von SQL Management Studio zu verwenden.
Klicken Sie mit der rechten Maustaste auf die Datenbank, gehen Sie zu Aufgaben, generieren Sie Skripte und führen Sie den Assistenten durch. Sie können auswählen, welche Objekte geschrieben werden sollen, und alles wird für Sie erledigt.
Wenn Sie nun versuchen, Ihr EIGENES Skript dazu zu bringen, dasselbe zu tun, sind Sie wahrscheinlich für eine Menge Arbeit bereit ...
quelle
Da wir Alternativen zu dem anbieten, was Sie gefragt haben ..
Wenn Sie sich in .Net befinden, sollten Sie sich den Datenbankveröffentlichungsassistenten in Visual Studio ansehen. Einfache Möglichkeit, Ihre Tabellen / Daten in eine Textdatei zu schreiben.
http://www.codeplex.com/sqlhost/Wiki/View.aspx?title=Database%20Publishing%20Wizard
quelle
Verwenden Sie das SSMS auf einfachste Weise. Sie können auch Optionen dafür konfigurieren (z. B. Sortierung, Syntax, Löschen ... Erstellen).
Andernfalls können Sie mit SSMS Tools Pack oder DbFriend auf CodePlex Skripte erstellen
quelle
Siehe meine Antwort in dieser Frage: So generieren Sie ein Erstellungsskript für eine Tabelle mithilfe einer SQL-Abfrage in SQL Server
Verwenden Sie diese Abfrage:
DROP FUNCTION [dbo].[Get_Table_Script] Go Create Function Get_Table_Script ( @vsTableName varchar(50) ) Returns VarChar(Max) With ENCRYPTION Begin Declare @ScriptCommand varchar(Max) Select @ScriptCommand = ' Create Table [' + SO.name + '] (' + o.list + ')' + ( Case When TC.Constraint_Name IS NULL Then '' Else 'ALTER TABLE ' + SO.Name + ' ADD CONSTRAINT ' + TC.Constraint_Name + ' PRIMARY KEY ' + ' (' + LEFT(j.List, Len(j.List)-1) + ')' End ) From sysobjects As SO Cross Apply ( Select ' [' + column_name + '] ' + data_type + ( Case data_type When 'sql_variant' Then '' When 'text' Then '' When 'decimal' Then '(' + Cast( numeric_precision_radix As varchar ) + ', ' + Cast( numeric_scale As varchar ) + ') ' Else Coalesce( '(' + Case When character_maximum_length = -1 Then 'MAX' Else Cast( character_maximum_length As VarChar ) End + ')' , '' ) End ) + ' ' + ( Case When Exists ( Select id From syscolumns Where ( object_name(id) = SO.name ) And ( name = column_name ) And ( columnproperty(id,name,'IsIdentity') = 1 ) ) Then 'IDENTITY(' + Cast( ident_seed(SO.name) As varchar ) + ',' + Cast( ident_incr(SO.name) As varchar ) + ')' Else '' End ) + ' ' + ( Case When IS_NULLABLE = 'No' Then 'NOT ' Else '' End ) + 'NULL ' + ( Case When information_schema.columns.COLUMN_DEFAULT IS NOT NULL Then 'DEFAULT ' + information_schema.columns.COLUMN_DEFAULT ELse '' End ) + ', ' From information_schema.columns Where ( table_name = SO.name ) Order by ordinal_position FOR XML PATH('')) o (list) Inner Join information_schema.table_constraints As TC On ( ( TC.Table_name = SO.Name ) AND ( TC.Constraint_Type = 'PRIMARY KEY' ) And ( TC.TABLE_NAME = @vsTableName ) ) Cross Apply ( Select '[' + Column_Name + '], ' From information_schema.key_column_usage As kcu Where ( kcu.Constraint_Name = TC.Constraint_Name ) Order By ORDINAL_POSITION FOR XML PATH('') ) As j (list) Where ( xtype = 'U' ) AND ( Name NOT IN ('dtproperties') ) Return @ScriptCommand End
Und Sie können dies
Function
so feuern :Select [dbo].Get_Table_Script '<Your_Table_Name>'
quelle
Versuchen Sie dies (mit "Ergebnisse zu Text"):
SELECT ISNULL(smsp.definition, ssmsp.definition) AS [Definition] FROM sys.all_objects AS sp LEFT OUTER JOIN sys.sql_modules AS smsp ON smsp.object_id = sp.object_id LEFT OUTER JOIN sys.system_sql_modules AS ssmsp ON ssmsp.object_id = sp.object_id WHERE (sp.type = N'V' OR sp.type = N'P' OR sp.type = N'RF' OR sp.type=N'PC')and(sp.name=N'YourObjectName' and SCHEMA_NAME(sp.schema_id)=N'dbo')
Prost,
quelle