注册
四两拨千斤:同义词巧解迁移难题
专栏/龙山溪笔谈/ 文章详情 /

四两拨千斤:同义词巧解迁移难题

myth8860 2025/09/29 15 1 0
摘要 智慧不在复杂,而在找准那个支点

问题来了

SQL Server里的表定义:

"TEMPLATE_ID" UNIQUEIDENTIFIER DEFAULT newsequentialid() NOT NULL

到达梦数据库水土不服:

  • 没有uniqueidentifier类型
  • 没有newsequentialid()函数

首战:手动改写 ❌

想把DEFAULT newsequentialid()改成DEFAULT newid()

但发现:

  • 几十张表都有这个定义
  • 一个个改太麻烦
  • 容易出错

再战:自定义函数 ❌

创建函数来模拟:

create function newsequentialid() return varchar(36) as begin return newid(); end;

结果建表时报错:

[-2670]:DEFAULT约束表达式无效

原因:自定义函数不能用在DEFAULT里

绝杀:同义词 ✅

一行代码解决:

CREATE SYNONYM newsequentialid FOR newid;

妙处:

  • 不用改任何表结构
  • 原SQL语句照常运行
  • 一次性搞定所有表

为什么能成?

  • guid()是系统函数,有"通行证"
  • 同义词让newsequentialid继承了这种权限
  • 编译时直接替换,绕过了限制

经验总结

有时候最复杂的难题,答案反而最简单。同义词这个平时不起眼的功能,关键时刻解决了大问题。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服