sqlserver根据表生成建表语句
时间: 2023-09-14 12:09:08 浏览: 54
在 SQL Server 中,可以使用以下两种方法根据表生成建表语句:
1. 使用 SQL Server Management Studio (SSMS) 生成脚本
步骤如下:
- 打开 SSMS,连接到需要生成建表语句的数据库。
- 在“对象资源管理器”中选择需要生成建表语句的表。
- 右键单击该表,选择“脚本表”>“生成脚本”。
- 在“生成脚本向导”中,选择“高级选项”并将“生成 CREATE TABLE 语句”设置为“是”。
- 点击“下一步”,选择要生成脚本的选项,如生成到新查询窗口、生成到文件等。
- 点击“下一步”并完成向导。
2. 使用系统表查询生成脚本
步骤如下:
- 打开 SQL Server Management Studio,连接到需要生成建表语句的数据库。
- 打开新查询窗口,输入以下 SQL 查询语句:
SELECT
'CREATE TABLE ' +
QUOTENAME(SCHEMA_NAME(schema_id)) + '.' +
QUOTENAME(name) + '(' +
STUFF((
SELECT
',[' + c.name + '] ' +
CASE
WHEN c.is_computed = 1
THEN 'AS ' + OBJECT_DEFINITION(c.object_id)
ELSE UPPER(tp.name) +
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 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 '' ELSE ' CONSTRAINT [' + OBJECT_NAME(c.default_object_id) + '] DEFAULT ' + OBJECT_DEFINITION(c.default_object_id)
END +
CASE
WHEN cc.definition IS NOT NULL THEN ' CONSTRAINT [' + cc.name + '] CHECK ' + cc.definition ELSE ''
END
END
FROM sys.columns c
JOIN sys.types tp ON c.user_type_id = tp.user_type_id
LEFT JOIN sys.check_constraints cc ON c.object_id = cc.parent_object_id AND cc.parent_column_id = c.column_id
WHERE c.object_id = t.object_id
ORDER BY c.column_id
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') +
')' +
CASE
WHEN t.temporal_type = 2 THEN ' WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = ' + QUOTENAME(SCHEMA_NAME(history_table_schema_id)) + '.' + QUOTENAME(history_table_name)) + '))'
ELSE ''
END
FROM
sys.tables t
WHERE
t.name = 'YourTableName'
AND SCHEMA_NAME(t.schema_id) = 'YourSchemaName'
将 “YourSchemaName” 和 “YourTableName” 替换为实际的模式和表名。
- 执行查询,将生成的建表语句复制到新的查询窗口或文件中。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)