sqlserver-to-dameng

SKILL开发
开发 未标注权限 许可证不明确
安装这个技能

将 SQL Server 的 DDL / DML / 存储过程 / 函数 / 触发器 / 批量脚本转换为可在达梦 DM8 上执行的等价 SQL。覆盖两种使用场景:(1) Vibe 会话型 —— 用户在 IDE 中选中文件/片段,模型即时转换;(2) SDD 任务型 —— 模型按 PRD 任务清单,在项目下逐个文件批量转换并产出迁移报告。强制原则:禁止"逐行字面替换",必须先做上下文分析(临时表、IDENTITY、TRY/CATCH、动态 SQL、批次分隔符等),并产出可静态校验的转换结果与离线验证脚本。

一句话选型结论

按资料字段整理

sqlserver-to-dameng是开发类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类开发 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_cf5b4eb9/sqlserver-to-dameng
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

开发
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_cf5b4eb9仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验未标注上游最后核验时间 · 数据更新 1791623162
正文体量23.6 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
写代码与改 bug

按需求补代码、定位并修掉报错。

读仓库与生成改动

让模型读懂项目结构,再给出可落地的改动。

跑测试与排查故障

按现象排查问题,补测试用例并复跑。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在开发场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
sqlserver-to-dameng当前 未标注权限 未标注 未标注 未标注 有
技能审查员 浏览器控制 ClawHub 市场 877.9 万 OpenClaw 有
Vercel React 最佳实践 浏览器控制 GitHub 仓库 849.1 万 Codex、Claude、Cursor 有
GitHub 代码协作 联网访问 ClawHub 市场 763.3 万 OpenClaw 有
网页设计指南 联网访问 GitHub 仓库 668.6 万 Codex、Claude、Cursor 有
本体论 只读 ClawHub 市场 663.7 万 OpenClaw 有

SKILL.md 全文

23.6 KB
模型实际读到的说明书原文,来自技能仓库

SQL Server → 达梦 DM8 异构数据库迁移 SKILL

> 本 SKILL 用于辅助将 SQL Server(2008 R2 及以上) 的 SQL 对象迁移到 达梦 DM8。
> MySQL → 达梦 场景属于同类异构迁移,规则集中已标注兼容项;如需扩展,请按 references/00-overview.md 的扩展流程追加。


0. 硬规则速查卡(生成前必读 · 14 条红线)

> 本卡是 SKILL 的最高优先级约束。每一条都是模型生成 .dm.sql 时反复违规过的硬伤,必须在生成每段 SQL 前在思考里逐条核对。
> 违反任一条,禁止提交产物。

0.1 临时表 / 局部临时表(5 条)

编号 规则 常见违规模式(已发生)
R-T01 局部临时表结尾 / EXCEPTION 块内禁止写 DROP TABLE IF EXISTS #T。达梦官方明文:"DROP 局部临时表仅兼容语法,并无实际含义"。 写 --00 删除临时表 DROP TABLE IF EXISTS #Temp_X;
R-T02 #temp 命名:"首字符 #,第二个字符不能是 #"。#temp 直接保留,禁止改名为 CREATE GLOBAL TEMPORARY TABLE。 写 CREATE GLOBAL TEMPORARY TABLE #Temp_X ON COMMIT DELETE ROWS
R-T03 禁止跨存过共享 #temp。达梦局部临时表仅在所属 DMSQL 程序内可见;SQL Server 跨存过共享必须改 CREATE GLOBAL TEMPORARY TABLE 或真实表 + session_id。 直接把 SQL Server 跨存过 #T 转换而不标 !RISK!
R-T04 禁止在动态 SQL(EXECUTE IMMEDIATE)中建 #temp。官方明文"局部临时表 DDL 不能与 EXECUTE IMMEDIATE 共用"。 EXECUTE IMMEDIATE 'CREATE TABLE #T(...)';
R-T05 DMDPC 集群环境禁止使用 #temp。DMDPC 不支持局部临时表,必须用 CREATE GLOBAL TEMPORARY TABLE。 DMDPC 下写 CREATE TABLE #T(...) 编译失败

0.2 脚本终止符 /(1 条)

编号 规则 常见违规模式
R-S01 END; / 之后禁止追加任何非空内容(包括 -- 注释、/ 下一行接 Markdown 说明、转换说明块等)。/ 仅在 disql 终端或脚本最后一行(EOF 前)合法。 END; / \n --- 转换说明 --- —— 会让 disql 重复解析"转换说明"段

0.3 数据类型(4 条)

编号 规则 常见违规模式
R-D-T1 DM 不支持 UNIQUEIDENTIFIER 类型!必须用 CHAR(36) + 业务生成 UUID,或迁移报告 §3.3 中已切换为 UNIQUEIDENTIFIER 的写法都是错的。 CREATE TABLE T (id UNIQUEIDENTIFIER, ...) —— 编译失败
R-D-T2 NUMERIC(p,s) 保留原命名!DM 中 NUMERIC/DECIMAL/DEC/NUMBER 四者完全等价,禁止把 NUMERIC 转 DECIMAL。 把 NUMERIC(18,2) 改成 DECIMAL(18,2)(画蛇添足)
R-D-T3 ROWVERSION / SQL Server 行版本戳 在 DM 中无原生等价物。DM 的 TIMESTAMP 是日期时间类型,不是行版本戳。常见方案:BIGINT + 触发器维护。 RowVer TIMESTAMP —— 语义错误
R-D-T4 XML 数据类型 DM 不支持(DM 仅支持 JSON/JSONB)。XML → TEXT 是常见妥协方案。 Payload XML —— 编译失败

0.4 DML 函数与语法(2 条)

编号 规则 常见违规模式
R-D-M1 DM 中 + 是算术加,字符串拼接必须用 \|\|。SQL Server 的 +(字符串拼接)在 DM 中是数值加。 col + N'中文' —— 数值加错误
R-D-M2 TOP n 保留!DM 原生支持 TOP(官方 disql-script.html §5.5 示例即用 select top 3 * from v$dm_ini;)。禁止把 TOP n 换 LIMIT n。 SELECT TOP 10 → SELECT LIMIT 10(语法错误)

0.5 存过 / 触发器(2 条)

编号 规则 常见违规模式
R-P-T1 存过 / 触发器支持 WITH ENCRYPTION!禁止当作"DM 不支持"。 去掉源 SQL Server 的 WITH ENCRYPTION
R-P-T2 触发器引用变量必须显式 REFERENCING OLD AS o NEW AS n 子句,然后用 :NEW.col / :OLD.col(使用位置有冒号,声明位置无冒号)。仅写 :NEW.col 不写 REFERENCING 子句编译失败。 CREATE TRIGGER ... FOR EACH ROW BEGIN ... :NEW.col ... END; —— 缺少 REFERENCING

0.6 必做自检(生成后立刻做)

完成产物后,必须对每条 R-T0X / R-S01 / R-D-TX / R-D-MX / R-P-TX 逐条回答:

  1. 该规则是否适用本文件?(Y/N)
  2. 产物中是否已遵守?(Y/N)
  3. 如 N,是否已标 !RISK! 并给出人工建议?

未完成自检 = 未完成产物。


1. 触发条件

满足以下任一即触发本 SKILL:

  • 用户在 IDE/CC/CodeX/Hermas/DSH 中选中 .sql、.tsql、存储过程脚本,并说"转换到达梦/达梦 DM/DM8"。
  • 用户粘贴 PRD/任务清单,要求把项目里 src/sql/、sql/、StoredProcedures/ 等目录下的 SQL 文件批量转换到达梦。
  • 关键词:迁移到达梦、DM8、国产化、异构迁移、反写存储过程、SQL Server 语法转换。

不触发:本 SKILL 不处理数据迁移(DTS 数据搬运)、不处理 MySQL/Oracle 自身的内部方言问题(除非作为源库)。


2. 强制原则(违反任何一条,输出视为无效)

> P1 — 上下文优先(Context First):禁止"看到一条改一条"。在动手转换前,必须先通读整个文件/整个存过/同一批次的所有语句,建立"上下文快照"。达梦 DM8 的临时表、动态 SQL、序列、MERGE INTO、TRY…CATCH、事务隔离级别、游标行为、@@IDENTITY / SCOPE_IDENTITY() 等均有与 SQL Server 不一致的语义,必须结合上下文统一处理。

> P2 — 可验证优先(Verifiable First):每个被转换的 SQL/存过,必须附带:
> 1. 转换说明(diff + 文字说明);
> 2. 静态校验标记(哪些规则被命中);
> 3. 离线验证脚本(至少包含 DDL 回放、语义对比、行数对比);
> 4. 风险点清单(标 !RISK!,给人工核验)。

> P3 — 类型与字符集对齐(Type & Charset Alignment):SQL Server 默认字符集是 UCS-2/UTF-16,达梦 DM8 默认 GB18030。字符串列、临时表、变量、NVARCHAR/VARCHAR(MAX)/TEXT/NTEXT/IMAGE 必须在文件顶部声明或在转换说明中显式提示用户做字符集确认。

> P4 — 输出可回溯(Traceable Output):转换结果 必须使用统一注释前缀标识每条规则的来源(如 -- DM-MIG: DDL-001 VARCHAR(MAX) → TEXT),便于后续自动化扫描。

> P5 — 宁缺勿造(Don't Fabricate):遇到无法确定对应达梦语法的项(极少见方言、私有扩展、CLR 存过、Service Broker、SQLXML 等),禁止臆测,必须标 !UNMAPPED! 并给出来源 SQL 与人工处理建议。

> P6 — 依赖预扫描 + 人机交互阻断(Dependency Pre-scan & Halt-and-Ask):在转换任何 存储过程 / 函数 / 触发器 / 视图 之前,必须先穷举其所引用的所有对象(基表、视图、子过程、子函数、临时表、序列、用户自定义类型、链接服务器、外部 DLL/CLR),并逐项核对依赖对象是否已存在、是否已转换、是否可访问。一旦发现 缺失 / 异常 / 名称不匹配 / 跨库访问 / 私有扩展,必须立即停止转换,进入"人机交互"流程,禁止跳过阻断、禁止基于假设继续。


3. 使用流程(两个场景共用前置步骤)

2.1 第一步:确认源库与目标库(不可省略)

必须向用户确认(或从 PRD 中读取)以下 4 项,缺一不可:

项目 必选 默认值 说明
源数据库类型 是 — 当前 SKILL 覆盖 SQL Server(必须)、MySQL(兼容)
源数据库版本 是 SQL Server 2008 R2 涉及 STRING_SPLIT、FORMAT、IIF、窗口函数等版本差异
目标数据库 是 达梦 DM8 本 SKILL 暂仅支持 DM8
目标字符集 是 GB18030 UTF-8 / GBK / GB18030 决定 NVARCHAR → VARCHAR / NVARCHAR 的取舍

> 未确认完毕前,不要开始任何转换。即使是一行 SELECT 也必须先确认。

2.2 第二步:上下文快照(Context Snapshot)

在动手转换前,必须在内部(或在回复中以表格形式)对当前文件/批次产出"上下文快照":

  • 临时表:#temp / @table_var 出现位置、列定义、是否跨批次、是否在存过内;
  • 序列与自增:IDENTITY 列、SEQUENCE 对象、@@IDENTITY / SCOPE_IDENTITY() 使用;
  • 事务与异常:BEGIN TRAN / TRY…CATCH / XACT_ABORT 嵌套;
  • 动态 SQL:EXEC sp_executesql / EXEC() / 嵌套调用;
  • 游标:DECLARE CURSOR + FETCH 循环内的 INSERT/UPDATE/DELETE;
  • 系统函数:@@ROWCOUNT、@@ERROR、@@TRANCOUNT、@@FETCH_STATUS、ISNULL/COALESCE、GETDATE()/SYSDATETIME()、NEWID()/NEWSEQUENTIALID();
  • 对象依赖:跨文件/跨存过的依赖(视图→表、存过→表、触发器→表);
  • 字符集:NVARCHAR vs VARCHAR、N'…' 前缀;
  • 标识符:是否使用了 SQL Server 的 [brackets]、"double quotes"、保留字冲突。

快照产出后,才允许进入规则匹配阶段。

2.3 第三步:规则匹配与转换

按 references/10-ddl-mapping.md → 20-dml-mapping.md → 30-proc-mapping.md → 40-context-pitfalls.md 的顺序逐项匹配。

每命中一条规则,必须在转换结果上方/旁边用注释标记:

-- DM-MIG: <RULE-CODE>  <说明>
--   原: <原 SQL 片段>
--   新: <新 SQL 片段>
--   风险: <低/中/高> —— <理由>

2.4 第四步(仅存过/函数/触发器/视图):依赖对象预扫描 —— 命中 P6 时为强阻断

> 本步骤是 P6 的强制落地,仅适用于 存储过程 / 函数 / 触发器 / 视图;纯 DDL/DML 文件可跳过。

2.4.1 扫描范围(不可遗漏任何一类)

从待转换文件的全量语句(含动态 SQL、注释内的提示、字符串字面量中嵌入的表名)中提取:

类别 必扫 示例
基表 ✅ FROM Orders、UPDATE T、INSERT INTO dbo.Log
视图 ✅ FROM V_OrderSummary、MERGE INTO v_target
子存储过程 ✅ EXEC P_X、CALL P_X、动态 SQL 内的 EXEC
用户自定义函数 ✅ SELECT dbo.F_Calc(...)
临时表 ✅ #temp、@table_var、嵌套存过内 #temp
序列 ✅ NEXT VALUE FOR seq、seq.NEXTVAL
用户自定义类型 ✅ UDT_X、TYPE_X(UDT)、表类型
链接服务器 / 跨库访问 ✅ linked_server.db.dbo.T、4 部分名称
CLR / 外部资源 ✅ EXEC sp_OACreate、CREATE ASSEMBLY、引用 DLL
触发器递归触发 ✅ TR_T 触发表 → 该表又有 TR_T2
同义词 ✅ SELECT * FROM syn_T(其本体要追溯)
用户自定义聚合 / 排序规则 ✅ WITH SCHEMABINDING 视图里自定义对象

2.4.2 核对动作

针对上一步提取出的每个对象,必须回答以下 5 个问题:

  1. 存在性:该对象在源库是否存在?(来源:sys.objects / sys.tables / 业务 PRD)
  2. 可访问性:当前 SKILL 是否已被授权访问?(Vibe 场景:用户是否已提供;SDD 场景:PRD 中是否声明)
  3. 是否已转换:在 SDD 模式下,该对象是否已经在前置批次中转换完成?(参见 references/40-context-pitfalls.md 第 7.2 节"迁移顺序")
  4. 是否在转换范围内:是否属于本 SKILL 覆盖范围?若是 CLR / 外部 DLL → !UNMAPPED!。
  5. 跨库 / 跨域:是否涉及其他数据库、其他 schema、其他主机?若是,需要单独决策。

2.4.3 阻断条件(任一触发即停)

现象 处理
对象在源库不存在(拼写错 / 已废弃 / 临时表未在本文件定义) 阻断,必须询问用户
对象存在但当前批次未转换(违反迁移顺序) 阻断,必须确认是否先转换该对象
对象存在但用户未提供 / 缺失源文件 阻断,必须询问是否补文件
对象涉及链接服务器 / 跨库访问 / 其他 schema 阻断,必须确认访问路径与权限
对象是 CLR / 外部 DLL / Service Broker / SQLXML 阻断 + 标 !UNMAPPED! + 给出替代建议
对象是用户自定义类型 UDT 阻断,确认 UDT 是否先转换或改造
循环依赖:A 调 B、B 调 A 阻断,必须由用户/架构师决策拆解

2.4.4 人机交互输出格式(Vibe + SDD 共用)

当触发阻断时,必须用以下结构回复用户,且不要附带任何转换结果:

## ⚠️ 依赖对象缺失 / 异常 —— 已停止转换

**当前文件**:`src/proc/P_Transfer.sql`
**待转换对象**:`P_Transfer`
**发现的问题**(共 N 项):

| # | 对象名 | 类型 | 状态 | 风险 | 建议 |
| --- | --- | --- | --- | --- | --- |
| 1 | `Orders` | 基表 | ⚠️ 未提供源文件 | 高 | 补充 `ddl/orders.sql` |
| 2 | `V_OrderSummary` | 视图 | ⚠️ 未转换 | 高 | 先转换 `view/V_OrderSummary.sql` |
| 3 | `seq_order_no` | 序列 | ⚠️ 未转换 | 中 | 先转换 `ddl/seq_order_no.sql` |
| 4 | `LinkedSvr2.DW.dbo.DimDate` | 跨库表 | ⚠️ 链接服务器未配置 | 高 | 由 DBA 配置 DBLink 或改造 SQL |
| 5 | `dbo.CLR_Filter` | CLR 函数 | ❌ !UNMAPPEDED | 高 | 改纯 SQL 重写或外迁 |

**请用户决策**(任选):
1. 补充缺失文件 → 转换完成后我**重新发起依赖扫描**,再继续本文件;
2. 仅转换本文件中**不依赖缺失对象**的部分(推荐程度最低,语义可能不一致);
3. 跳过本文件,进入下一任务;
4. 暂停整个流程,等待人工干预。

收到用户答复后:根据答复类型走对应分支;如答复为"补充文件",必须重新执行 2.5.1 ~ 2.5.2,确认全部依赖都已就位才能继续;不得基于历史上下文推断"应该 OK 了"。

2.4.5 Vibe 场景的快捷确认

如果用户明确说"所有依赖都已转换好"/"你不用检查依赖了",仍必须把扫描结果展示给用户并附带:

按你的指示跳过依赖核查。但我已扫出以下依赖项,请确认:
- 依赖基表 5 张、视图 2 个、子过程 3 个、序列 1 个
- ⚠️ 检测到未提供源的对象:`CLR_Filter`、`LinkedSvr2.DimDate`
- 是否真的可以继续?是 / 否

> 即使用户授权"跳过检查",也至少要标注发现项并获得显式确认,避免后续翻车。

2.4.6 SDD 场景的阻塞登记

SDD 模式下,每次触发阻断必须:
1. 在 migration-runbook.md 的"阻塞项"表追加一行(含对象名、文件路径、责任人、解决方式);
2. 整个流程暂停,等待用户/责任人决策;
3. 决策落地后,从被阻断的文件重新发起转换(不是恢复旧的中间态);
4. 每累计 5 个阻塞项,必须停下来向用户回报整体进展。


2.5 第五步:产出验证脚本

对每个被转换的文件,必须同时产出以下三个文件/片段(即使是 Vibe 会话场景,也要在回复中以代码块给出):

  1. <原文件名>.dm.sql —— 转换后的达梦 SQL;
  2. <原文件名>.verify.sql —— 离线验证脚本(DDL 回放 + 数据对比 + 行数对比);
  3. <原文件名>.migration-report.md —— 转换报告(含上下文快照、命中规则、风险点)。

4. 两种使用场景的具体差异

3.1 Vibe 会话型(单文件 / 选中片段)

触发:用户在 IDE 中选中 1 个 .sql 文件或一段 SQL,要求"转达梦"。

行为规范:

  1. 读取用户选中的内容(整文件优先;片段则要追问"是不是只看这一段"——因为临时表可能跨片段)。
  2. 走完第 2 节"确认源/目标 → 上下文快照 → 规则匹配 → 验证脚本"完整 4 步。
  3. 输出顺序固定:
    - (a) 上下文快照表格(哪怕只有 5 行);
    - (b) 转换后的 SQL(带 -- DM-MIG: 注释);
    - (c) 转换说明(diff 表格 + 文字);
    - (d) 验证脚本(.verify.sql 内容);
    - (e) 风险清单(!RISK! / !UNMAPPED!)。
  4. 不要直接覆盖原文件 —— 写到 <原文件名>.dm.sql 同目录,提示用户 diff。

3.2 SDD 任务型(PRD 驱动批量转换)

触发:用户给出 PRD/任务清单(典型文档:PRD-sqlserver-to-dameng.md 或项目下 tasks/migration-tasks.md),要求按清单逐文件迁移。

行为规范:

  1. 先读取 PRD,提取任务清单:[{task_id, file, objects[], priority}]。
  2. 强制预扫描全项目:
    - 列出所有 .sql / .tsql / .pck / .prc / .fn / .trg / .vw;
    - 找出跨文件依赖(视图引用表、存过调用存过、触发器绑表);
    - 产出转换顺序(被依赖的先转,如:表 → 视图 → 存过 → 触发器 → 应用 SQL)。
  3. 按依赖顺序逐文件转换,每个文件走完整 4 步。
  4. 维护一份 migration-runbook.md(迁移运行手册),逐文件登记:
    - 任务 ID / 文件 / 转换时间 / 命中规则 / 风险等级 / 是否需人工核验 / 验证脚本路径。
  5. 每完成 5 个文件或遇到 !UNMAPPED! 时,必须停下来向用户回报,等待确认或继续。

5. 加载顺序(按需)

阶段 必读 references
第 1 步(确认源/目标) —
第 2 步(上下文快照) 40-context-pitfalls.md
第 3 步(规则匹配) 10-ddl-mapping.md → 20-dml-mapping.md → 30-proc-mapping.md → 40-context-pitfalls.md
第 4 步(验证) 50-verification.md
输出前自检 90-checklist.md

6. 禁止行为(红线)

  • 禁止直接把 [brackets] 替换为 "double quotes" —— 达梦中括号 [id] 也是合法标识符,但语义与 SQL Server 不同(SQL Server 中括号用于保留字转义,达梦中括号是数组下标)。
  • 禁止把 TOP n 替换为 LIMIT n 后就结束 —— 还需要检查 TOP n PERCENT、TOP n WITH TIES、TOP 在 DELETE/UPDATE 中的位置(达梦不支持 UPDATE TOP / DELETE TOP)。
  • 禁止把 ISNULL(a, b) 直接替换为 NVL(a, b) 或 COALESCE(a, b) —— 三者在多参数、空值传播、性能上不等价。
  • 禁止把 TRY…CATCH 直接替换为达梦的 EXCEPTION 块 —— 达梦 DM8 的 PL/SQL 风格异常处理与 SQL Server 的 TRY…CATCH 语义差异极大(见 30-proc-mapping.md)。
  • 禁止把 IDENTITY(1,1) 直接保留 —— 达梦不支持 IDENTITY 属性,必须改为 INT IDENTITY(1,1) 等价物(序列 + 触发器,或 AUTO_INCREMENT 视情况)。
  • 禁止假定 VARCHAR(MAX) 与 TEXT 完全等价 —— 达梦 TEXT 不可用于 GROUP BY / 索引 / 某些函数参数。
  • 禁止忽略 GO 批分隔符 —— 达梦执行 ; 结束符,GO 必须去除或转为脚本注释。
  • 禁止对动态 SQL EXEC sp_executesql 简单替换 —— 见 30-proc-mapping.md 章节 6。
  • 禁止跳过验证脚本产出 —— "转换完没生成 .verify.sql" = 没完成。
  • 禁止在依赖对象未确认时继续(违反 P6)—— 任何存储过程 / 函数 / 触发器 / 视图在转换前必须完成依赖预扫描;发现缺失 / 异常 / 跨库 / CLR / 循环依赖时,必须立即停止并进入人机交互流程,不得基于"用户应该会补"或"应该没问题"继续。
  • 禁止把 SQL Server TOP n 一律换 LIMIT n —— 达梦 DM8 原生支持 TOP(参见 disql-script.html 5.5 节官方示例),业务允许时直接保留 TOP。
  • 禁止把 NUMERIC(p,s) 一律转 DECIMAL(p,s) —— 达梦 DM8 同时支持 NUMERIC / DECIMAL / DEC / NUMBER 四者等价,保留原命名即可。
  • 禁止把 DATETIME / DATETIME2 转 TIMESTAMP 时把语义弄错 —— 达梦 TIMESTAMP 与 DATETIME 是同义词(不是 SQL Server 的行版本戳);SQL Server ROWVERSION / TIMESTAMP(行版本戳)在达梦无原生等价物。
  • 禁止把局部临时表结尾 / EXCEPTION 内的 DROP TABLE #T 当作"清理必须" —— 官方明确"DROP 局部临时表仅兼容语法、无实际含义",是冗余。
  • 禁止把存过 / 触发器 WITH ENCRYPTION 当作"DM 不支持" —— DM 支持(v1 反转)。
  • 禁止把触发器引用变量写成 :NEW.col / :OLD.col 但忘了 REFERENCING 子句 —— DM 触发器必须显式声明引用变量名。
  • 禁止跨存过共享 #T —— 达梦局部临时表仅作用域于所在 DMSQL 程序,SQL Server 跨存过共享必须改用 CREATE GLOBAL TEMPORARY TABLE 或真实表 + session_id。
  • 禁止在动态 SQL 中建 #T —— 局部临时表 DDL 不能与 EXECUTE IMMEDIATE 共用(官方 dm8_sql-various-control.html §4.1 明文)。
  • 禁止用 ##G 全局临时表 —— 达梦无此概念,改 CREATE GLOBAL TEMPORARY TABLE。
  • 禁止DMDPC 集群环境使用局部临时表 —— DMDPC 不支持局部临时表,必须用 GLOBAL TEMPORARY TABLE。
  • 禁止对 XML / UNIQUEIDENTIFIER / ROWVERSION / GEOGRAPHY / HIERARCHYID / SQL_VARIANT 假定达梦有等价类型 —— 这些全部 !UNMAPPED!,见 10-ddl-mapping.md §1.5 / §1.6。
  • 禁止把 PL/SQL 块结尾的 / 当作"必须去除" —— / 是 disql 终端合法的执行触发符;但 / 紧跟非 SQL 注释块会引发歧义,禁止在 END; / 之后再追加任何非空内容。

7. 输出格式约束

无论场景,最终输出必须包含以下区块(顺序可调,缺一不可):

  1. 上下文快照表
  2. 转换后 SQL(带 -- DM-MIG: 注释)
  3. 转换说明(变更项 + 原因)
  4. 风险清单(!RISK! / !UNMAPPED! 列表)
  5. 离线验证脚本(.verify.sql 完整内容)
  6. 下次迁移前置条件(如下游文件依赖了本次产出的对象)

8. 元信息

  • SKILL 版本:2.0.1(新增 §0 硬规则速查卡:14 条红线集中放在 SKILL 头部,模型生成每段 SQL 前必读;基于 v2.0.0 阶段后产物复核中发现模型反复违规的事实)
  • 目标数据库版本:达梦 DM8(默认兼容 2024 年以前的 DM8 子版本;2025 后子版本多数规则同样适用)
  • 源数据库版本:SQL Server 2008 R2 / 2012 / 2014 / 2016 / 2017 / 2019 / 2022
  • MySQL 兼容范围:5.7 / 8.0(标注差异点,不做为主路径)
  • 已知不支持项:CLR 存过、Service Broker、SQLXML、FileTable、External Scripts、PolyBase

9. 快速入口

  • 核心原则、扩展流程:references/00-overview.md
  • DDL 映射:references/10-ddl-mapping.md
  • DML 映射:references/20-dml-mapping.md
  • 存过/函数/触发器:references/30-proc-mapping.md
  • 上下文依赖陷阱:references/40-context-pitfalls.md
  • 验证脚本模板:references/50-verification.md
  • 输出前自检清单:references/90-checklist.md

常见问题

5 问
答案由本站依据条目字段整理
sqlserver-to-dameng怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_cf5b4eb9/sqlserver-to-dameng。安装方式为未标注。装完刷新技能列表或重开客户端。

sqlserver-to-dameng支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

sqlserver-to-dameng权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

sqlserver-to-dameng收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

sqlserver-to-dameng用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 未标注。