You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用SQL命令复制Azure SQL数据库架构刷新DryrunDataSchema

SQL Server跨架构复制结构实现方案

SQL Server没有原生单条命令直接完成「删除DryrunDataSchema全量对象→复刻ProductionDataSchema结构重建」的需求,但可以通过查询系统元数据动态生成执行脚本,完整实现你的要求:

步骤1:生成删除DryrunDataSchema所有对象的脚本

执行以下SQL会生成删除DryrunDataSchema下所有用户对象的命令,复制输出结果执行即可清空目标架构:

DECLARE @DeleteSQL NVARCHAR(MAX) = N'';
-- 先删外键约束,避免删除表时出现依赖报错
SELECT @DeleteSQL += N'ALTER TABLE ' + QUOTENAME(s.name) + N'.' + QUOTENAME(o.name) + N' DROP CONSTRAINT ' + QUOTENAME(fk.name) + N';' + CHAR(13)
FROM sys.foreign_keys fk
JOIN sys.objects o ON fk.parent_object_id = o.object_id
JOIN sys.schemas s ON o.schema_id = s.schema_id
WHERE s.name = 'DryrunDataSchema';

-- 再删所有用户对象(表、视图、存储过程、函数、触发器等)
SELECT @DeleteSQL += N'DROP ' + 
CASE o.type 
    WHEN 'U' THEN N'TABLE' 
    WHEN 'V' THEN N'VIEW'
    WHEN 'P' THEN N'PROCEDURE'
    WHEN 'FN' THEN N'FUNCTION'
    WHEN 'TR' THEN N'TRIGGER'
END + N' ' + QUOTENAME(s.name) + N'.' + QUOTENAME(o.name) + N';' + CHAR(13)
FROM sys.objects o
JOIN sys.schemas s ON o.schema_id = s.schema_id
WHERE s.name = 'DryrunDataSchema' AND o.type IN ('U','V','P','FN','TR');

PRINT @DeleteSQL;
-- 确认输出内容无误后取消注释执行
-- EXEC sp_executesql @DeleteSQL;

步骤2:生成复刻ProductionDataSchema结构到DryrunDataSchema的脚本

执行以下SQL会生成创建表、基础约束等结构的命令,输出后执行即可完成结构同步:

DECLARE @CreateSQL NVARCHAR(MAX) = N'';
-- 生成表创建语句,如需包含索引、触发器、自定义约束可扩展对应逻辑
SELECT @CreateSQL += N'CREATE TABLE DryrunDataSchema.' + QUOTENAME(t.name) + N' (' + CHAR(13) +
    STRING_AGG(
        QUOTENAME(c.name) + N' ' + ty.name + 
        CASE WHEN ty.name IN ('varchar','nvarchar','char','nchar') THEN N'(' + CASE WHEN c.max_length = -1 THEN N'MAX' ELSE CAST(c.max_length/CASE WHEN ty.name LIKE 'n%' THEN 2 ELSE 1 END AS VARCHAR) END + N') '
        ELSE N' ' END +
        CASE WHEN c.is_nullable = 0 THEN N'NOT NULL ' ELSE N'NULL ' END
    , N',' + CHAR(13)) + N');' + CHAR(13)
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id = s.schema_id
JOIN sys.columns c ON t.object_id = c.object_id
JOIN sys.types ty ON c.system_type_id = ty.system_type_id AND c.user_type_id = ty.user_type_id
WHERE s.name = 'ProductionDataSchema'
GROUP BY t.name;

PRINT @CreateSQL;
-- 确认输出内容无误后取消注释执行
-- EXEC sp_executesql @CreateSQL;

注意事项

  • 执行所有脚本前请先备份DryrunDataSchema下需要保留的内容,操作会清空目标架构所有现有对象
  • 以上脚本为基础版本,默认仅同步表结构,如果你需要同步索引、存储过程、视图等其他对象,可对应扩展系统视图的查询逻辑
  • 建议先在测试环境验证输出的SQL内容,确认符合预期后再正式执行
  • 如果需要同步表数据,可以在结构创建完成后执行INSERT INTO DryrunDataSchema.表名 SELECT * FROM ProductionDataSchema.表名实现数据复制

内容的提问来源于stack exchange,提问作者Metallic Skeleton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 19:15:03