【发布时间】:2019-01-27 13:44:08
【问题描述】:
注意>我不能修改旧脚本!!!
第一个脚本创建表 TABLENAME。
我有表 TABLENAME 列 COLUMNNAME DATE DEFAULT GETDATE();
我需要做的:->
ALTER TABLE TABLENAME
ALTER COLUMN COLUMNNAME DATETIME;
我得到一个错误:
对象“DF__TABLENAME__COLUMNNAME__7BC8385B”依赖于列“COLUMNNAME”。
我在多个数据库上都有这个脚本,所以这部分 'DF__TABLENAME__COLUMNNAME__7BC8385B'
在每个数据库上都不同。
我可以做
ALTER TABLE TABLENAME
DROP CONSTRAINT DF__TABLENAME__COLUMNNAME__7BC8385B;
它会起作用,但在所有数据库上手动使用它不会很有效,我需要制作脚本,它会在任何地方更改此列,而无需知道该约束名称。
【问题讨论】:
-
我并没有完全按照您在这里真正想要做的事情,但动态 SQL 可能是解决方案。基本上,您可以使用变量作为输入来构建查询字符串,然后执行它。
-
我需要在脚本中将日期更改为日期时间,但我不能这样做,因为此列有约束,并且在每个数据库上,此约束都有不同的名称,所以我不知道如何更改它,因为我不能改变,因为错误/对象是依赖的,我不能放弃约束,因为我不知道确切的名字。
-
看起来有人没有命名他们的约束,如果它有一个像
DF__TABLENAME__COLUMNNAME__7BC8385B这样的名字。到目前为止你有没有尝试过? -
是的,这个约束是在我使用 Default gatdate() 之后创建的
-
从字典中获取约束名称,使用该数据构建一个删除它的语句并执行它。这就是动态 SQL 部分。然后更改列并重新创建约束。
标签: sql sql-server