Ich habe folgende Situation: Ich arbeite an einem Projekt wo Datenbank Hunderte von Tabellen enthält, und sehr oft weiß ich, welche Tabelle ich für Skript generieren muss, aber es in der Liste finden von allen Tabellen braucht viel Zeit. Ich würde gerne wissen, gibt es eine Möglichkeit, Skript zu schreiben, die Skript für Tabelle generieren wird. Da ich den Tabellennamen bereits kenne, ist es einfacher für mich, ihn einfach einzugeben, als ihn in einer riesigen Liste ähnlicher Namen zu suchen.SQL-Server-Skript zum Generieren von Skript für Tabelle
3
A
Antwort
1
Ja, können Sie auf jeden Fall Ihre eigene Prozedur schreiben, Skripte für einen bestimmten Tabellennamen zu erzeugen, die als Parameter zur Verfügung gestellt werden. In meinem Beispiel bin ich ‚dbo.Table1‘ als Parameter an diese Abfrage übergeben: (Sie dies in einer Stored Procedure wickeln kann, natürlich)
DECLARE
@object_name SYSNAME = 'dbo.TABLE1'
, @object_id INT = object_id('dbo.TABLE1')
, @SQL NVARCHAR(MAX)
SELECT
@object_name = '[' + OBJECT_SCHEMA_NAME(o.[object_id]) + '].[' + OBJECT_NAME([object_id]) + ']'
, @object_id = [object_id]
FROM (SELECT [object_id] = @object_id) o
SELECT @SQL = 'CREATE TABLE ' + @object_name + CHAR(13) + '(' + CHAR(13) + STUFF((
SELECT CHAR(13) + ' , [' + c.name + '] ' +
CASE WHEN c.is_computed = 1
THEN 'AS ' + OBJECT_DEFINITION(c.[object_id], c.column_id)
ELSE
CASE WHEN c.system_type_id != c.user_type_id
THEN '[' + SCHEMA_NAME(tp.[schema_id]) + '].[' + tp.name + ']'
ELSE '[' + UPPER(tp.name) + ']'
END +
CASE
WHEN tp.name IN ('varchar', 'char', 'varbinary', 'binary')
THEN '(' + CASE WHEN c.max_length = -1
THEN 'MAX'
ELSE CAST(c.max_length AS VARCHAR(5))
END + ')'
WHEN tp.name IN ('nvarchar', 'nchar')
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 AND c.system_type_id = c.user_type_id
THEN ' COLLATE ' + c.collation_name
ELSE ''
END +
CASE WHEN c.is_nullable = 1
THEN ' NULL'
ELSE ' NOT NULL'
END +
CASE WHEN c.default_object_id != 0
THEN ' CONSTRAINT [' + OBJECT_NAME(c.default_object_id) + ']' +
' DEFAULT ' + OBJECT_DEFINITION(c.default_object_id)
ELSE ''
END +
CASE WHEN cc.[object_id] IS NOT NULL
THEN ' CONSTRAINT [' + cc.name + '] CHECK ' + cc.[definition]
ELSE ''
END +
CASE WHEN c.is_identity = 1
THEN ' IDENTITY(' + CAST(IDENTITYPROPERTY(c.[object_id], 'SeedValue') AS VARCHAR(5)) + ',' +
CAST(IDENTITYPROPERTY(c.[object_id], 'IncrementValue') AS VARCHAR(5)) + ')'
ELSE ''
END
END
FROM sys.columns c WITH(NOLOCK)
JOIN sys.types tp WITH(NOLOCK) ON c.user_type_id = tp.user_type_id
LEFT JOIN sys.check_constraints cc WITH(NOLOCK)
ON c.[object_id] = cc.parent_object_id
AND cc.parent_column_id = c.column_id
WHERE c.[object_id] = @object_id
ORDER BY c.column_id
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 7, ' ') +
ISNULL((SELECT '
, CONSTRAINT [' + i.name + '] PRIMARY KEY ' +
CASE WHEN i.index_id = 1
THEN 'CLUSTERED'
ELSE 'NONCLUSTERED'
END +' (' + (
SELECT STUFF(CAST((
SELECT ', [' + COL_NAME(ic.[object_id], ic.column_id) + ']' +
CASE WHEN ic.is_descending_key = 1
THEN ' DESC'
ELSE ''
END
FROM sys.index_columns ic WITH(NOLOCK)
WHERE i.[object_id] = ic.[object_id]
AND i.index_id = ic.index_id
FOR XML PATH(N''), TYPE) AS NVARCHAR(MAX)), 1, 2, '')) + ')'
FROM sys.indexes i WITH(NOLOCK)
WHERE i.[object_id] = @object_id
AND i.is_primary_key = 1), '') + CHAR(13) + ');'
SELECT @SQL
0
Hier ist ein Link zu einem gespeicherten Proc-Code, den Sie hinzufügen und ausführen können, indem Sie nur den Tabellennamen angeben, um die DDL zu erhalten.
Verwandte Themen
- 1. PHP: Skript zum Generieren von Kreuzworträtselspiel?
- 2. Xcode-Skript zum Generieren/Synthetisieren von Eigenschaften
- 3. Bash-Skript zum Generieren von HTML-Vorlage
- 4. Skript für Tabelle mit Daten in SQL Server 2005 generieren
- 5. Skript zum Generieren von HTML Beyond Vergleichen von Ordnerunterschieden
- 6. Hibernate zum Generieren von Indizes für Fremdschlüssel
- 7. Tools zum Generieren von Einheitenabhängigkeiten für Delphi
- 8. Generieren von SQL-Server-Skript kann Erstellen und Ändern von Anweisungen für die gleiche Tabelle
- 9. Optimieren Generieren von HTML-Tabelle in js
- 10. Skript zum Parsen Vorlage dann Job dsl-Datei generieren
- 11. Skripte zum Generieren von CSV-Dateien für Funken Canssandra Daten
- 12. Vergleichen Sie Tools zum Generieren von Update-Skript für SQL-Server
- 13. Tool zum Generieren von C# DTO-Klasse für SQL-Tabelle UND DTO-Instanzen für jede Zeile in Tabelle
- 14. Einfache Abfrage zum Generieren von Datenbankmetriken?
- 15. Generieren HTML-Tabelle Clientseite
- 16. Generieren von EXE aus dem IronPython-Skript
- 17. VB-Skript, ... Code zum Erstellen von Tabelle in HTML
- 18. Tool zum Generieren eines Datenmigrationsskripts von Tabelle A nach Tabelle B In SQL Server
- 19. Auto generieren ID, Stud_id für Tabelle
- 20. Schaltfläche zum Veröffentlichen der Datenbank generieren Skript deaktiviert
- 21. Generieren von JQuery-Skript mit PHP
- 22. Migration generieren - Join-Tabelle erstellen
- 23. Skript für Trigger nur mithilfe des Skriptassistenten generieren
- 24. Verwendung von TSQL zum Generieren von JSON
- 25. Generieren von Testdaten in PostgreSQL Tabelle
- 26. Tool zum Generieren von XML-Datei von Xsd (zum Testen)
- 27. Generieren von dynamischen Tabelle mit JSP
- 28. Verwenden von Twig zum Generieren von JSON
- 29. Skript für eine Schaltfläche zum Hinzufügen
- 30. SQL-Skript aus Tabellen generieren
RedGate eine kostenlose SQL Suchwerkzeug hat, mit dem Sie suchen, und wird eine Datenbankobjektdefinition aufrufen, wenn Sie das Objekt aus den Suchergebnissen auswählen http://www.red-gate.com/products/sql-development/sql-search/ – mallan1121
Sie können die Filterung im Objekt-Explorer verwenden, wenn Sie wirklich müssen. Klicken Sie einfach mit der rechten Maustaste auf "Tabellen" und wählen Sie Filter -> Filtereinstellungen. FWIW Ich fühle deinen Schmerz. Ich habe ein System, mit dem es schwer zu arbeiten ist. Es gibt über 4.000 Tabellen und die Namen wurden in einem alten Schul-RPG-System gestartet, so dass jede Tabelle genau 6 Zeichen im Namen hat und sie alle in Großbuchstaben geschrieben sind. –
Siehe diese Frage/Antwort auf der DBA Stack Exchange-Website: http://dba.stackexchange.com/questions/53085/is-there-a-way-to-generate-table-create-script-in-tsql –