sqlserver根据表生成建表语句
时间: 2023-09-14 13:09:08 浏览: 59
在 SQL Server 管理工具中,可以通过以下步骤生成建表语句:
1. 在对象资源管理器中,右键点击要生成建表语句的表,选择“脚本” -> “生成脚本”。
2. 在“生成脚本向导”中,选择“选择对象”页面,确认要生成建表语句的表已被选中。
3. 在“设置脚本选项”页面,选择“高级”选项卡。
4. 在“高级”选项卡中,将“脚本 CREATE”设置为“是”,并将“索引/主键”、“外键”、“Triggers”等其他选项根据需要设置为“否”。
5. 点击“确定”按钮,然后点击“下一步”按钮。
6. 在“摘要”页面中,确认选项设置正确,然后点击“完成”按钮。
7. 在“生成脚本”对话框中,选择要保存建表语句的位置和文件名,然后点击“保存”按钮。
这样就可以生成对应表的建表语句了。
相关问题
sqlserver通过语句 根据表生成建表语句
可以通过以下语句生成指定表的建表语句:
```
SELECT
'CREATE TABLE ' + TABLE_NAME + ' (' +
STUFF((
SELECT ', ' + COLUMN_NAME +
CASE
WHEN DATA_TYPE IN ('varchar', 'nvarchar', 'char', 'nchar') THEN '(' + CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(4)) + ')'
WHEN DATA_TYPE IN ('decimal', 'numeric') THEN '(' + CAST(NUMERIC_PRECISION AS VARCHAR(4)) + ', ' + CAST(NUMERIC_SCALE AS VARCHAR(4)) + ')'
ELSE ''
END +
CASE WHEN IS_NULLABLE = 'YES' THEN ' NULL' ELSE ' NOT NULL' END
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = t.TABLE_NAME
ORDER BY ORDINAL_POSITION
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '')
+ ');'
FROM INFORMATION_SCHEMA.TABLES t
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME = 'YourTableName'
```
将 `YourTableName` 替换为你所需生成建表语句的表名即可。执行该语句后,会生成该表的建表语句。
sqlserver通过语句 根据表生成建表语句及索引和约束的语句
在 SQL Server 中,可以使用以下语句生成表的建表语句:
```
SELECT
'CREATE TABLE ' +
schema_name(tab.schema_id) + '.' + tab.name + '(' +
column_list +
CASE WHEN EXISTS (SELECT * FROM sys.indexes WHERE object_id = tab.object_id AND is_primary_key = 1) THEN ', CONSTRAINT ' + pk.name + ' PRIMARY KEY CLUSTERED (' + pk_col_list + ')' ELSE '' END +
')' +
CASE WHEN tab.create_date <> tab.modify_date THEN '/* Created: ' + CONVERT(NVARCHAR(30),tab.create_date,120) + ', Modified: ' + CONVERT(NVARCHAR(30),tab.modify_date,120) + ' */' ELSE '' END AS create_table_script
FROM sys.tables AS tab
CROSS APPLY (SELECT
STUFF((SELECT
', ' + col.name + ' ' + sys.types.name +
CASE WHEN col.is_nullable = 0 THEN ' NOT NULL' ELSE '' END +
CASE WHEN defn.definition IS NOT NULL THEN ' DEFAULT' + defn.definition ELSE '' END
FROM sys.columns AS col
JOIN sys.types ON col.user_type_id = sys.types.user_type_id
LEFT JOIN sys.default_constraints AS defn ON col.default_object_id = defn.object_id
WHERE col.object_id = tab.object_id
ORDER BY col.column_id
FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 2, '')) AS column_list
LEFT JOIN (
SELECT
i.object_id,
name,
STUFF((SELECT
', ' + col.name
FROM sys.index_columns AS ic
JOIN sys.columns AS col ON ic.column_id = col.column_id AND ic.object_id = col.object_id
WHERE i.object_id = ic.object_id AND i.index_id = ic.index_id
ORDER BY ic.key_ordinal
FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 2, '') AS pk_col_list
FROM sys.indexes AS i
WHERE is_primary_key = 1
) AS pk ON tab.object_id = pk.object_id
```
此语句将生成所有表的 CREATE TABLE 语句和主键约束。如果还需要生成索引和其他约束的语句,可以参考以下示例:
```
SELECT
'CREATE ' +
CASE WHEN is_unique_constraint = 1 THEN 'UNIQUE ' ELSE '' END +
'INDEX ' +
ix.name + ' ON ' +
schema_name(tab.schema_id) + '.' + tab.name + '(' +
STUFF((SELECT
', ' + col.name +
CASE WHEN ic.is_descending_key = 1 THEN ' DESC' ELSE '' END
FROM sys.index_columns AS ic
JOIN sys.columns AS col ON ic.column_id = col.column_id AND ic.object_id = col.object_id
WHERE ic.object_id = ix.object_id AND ic.index_id = ix.index_id
ORDER BY ic.key_ordinal
FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 2, '') +
')' +
CASE WHEN ix.create_date <> ix.modify_date THEN '/* Created: ' + CONVERT(NVARCHAR(30),ix.create_date,120) + ', Modified: ' + CONVERT(NVARCHAR(30),ix.modify_date,120) + ' */' ELSE '' END AS create_index_script
FROM sys.indexes AS ix
JOIN sys.tables AS tab ON ix.object_id = tab.object_id
WHERE is_primary_key = 0 AND is_unique_constraint = 0 AND is_disabled = 0 AND ix.type <> 0
```
此语句将生成所有非聚集索引的 CREATE INDEX 语句。如果还需要生成其他约束的语句,可以使用类似的方法查询 sys.objects 和其他系统视图。