sql server 没有 schema_and_data 克隆语法,该关键词仅存在于 azure data factory 等外部工具中;原生 t-sql 不支持一键结构+数据复制,select * into 仅保留基础列定义,丢失约束、索引、identity 等元信息。

SQL Server 没有内置的 SCHEMA_AND_DATA 克隆语法 —— 这个关键词在 SQL Server 中根本不存在,是常见误传或混淆(比如混用了 Azure Data Factory 的复制活动配置项)。
为什么找不到 SCHEMA_AND_DATA 选项
SQL Server 的原生 DDL(如 CREATE TABLE、SELECT INTO、INSERT ... SELECT)不支持类似 PostgreSQL 的 CREATE TABLE ... LIKE ... INCLUDING ALL 或 MySQL Clone Plugin 那样的一键结构+数据克隆指令。所谓 “SCHEMA_AND_DATA” 实际只出现在外部工具中:
- Azure Data Factory / Fabric 的复制活动配置里,
schemaAndData是一个布尔型开关,控制是否自动建表并灌入数据,但它不是 T-SQL 语句的一部分 - SQL Server Management Studio (SSMS) 的“生成脚本”向导里有“架构和数据”选项,但那是 GUI 功能,导出的是多条独立语句(
CREATE TABLE+ 多条INSERT),并非单条命令 -
SELECT * INTO new_table FROM old_table只能复制结构和数据,但无法继承约束、索引、默认值、计算列、标识属性(IDENTITY会丢失)、FILESTREAM、加密列等元信息
真正可用的克隆+修改组合方案
若目标是「先克隆表结构和数据,再修改新表」,需分步操作,并注意关键限制:
- 用
SELECT * INTO快速获得带数据的副本:SELECT * INTO dbo.new_table FROM dbo.original_table;
→ 仅保留列定义、NULL/NOT NULL、基础数据类型;丢弃所有约束、索引、触发器、统计信息、IDENTITY属性 - 手动补全缺失对象:运行
sp_help 'original_table'查看原始表的约束名、索引、主键等,再用ALTER TABLE ... ADD CONSTRAINT和CREATE INDEX逐个重建 - 若需保留
IDENTITY列:必须改用SET IDENTITY_INSERT new_table ON+INSERT ... SELECT,且目标表须提前用CREATE TABLE显式定义含IDENTITY的列 - 修改新表前,务必确认依赖关系:
sys.sql_expression_dependencies会记录视图、函数、存储过程对原表的引用,但不会自动更新为指向新表 —— 你得手动检查并调整
MERGE 适合增量同步,不是克隆
有人试图用 MERGE 实现“克隆”,这是典型误用。例如:
MERGE new_table AS t USING original_table AS s ON 1=0 WHEN NOT MATCHED THEN INSERT ...;
这只能插入数据,不能创建表;且 MERGE 本身不处理索引、约束等 schema 元素。它本质是 DML,不是 DDL。真要同步结构变更,必须配合外部脚本或工具(如 Redgate SQL Compare、Azure Data Studio 的“Schema Compare”扩展)。
最易被忽略的一点:SQL Server 不跟踪跨数据库的 schema 依赖。如果你把新表建在另一个 database 下,sys.sql_expression_dependencies 里的 referenced_database_name 字段可能为空或不准,靠它查依赖容易漏掉调用方。











