如何为整个数据库生成脚本
how to generate a script for the entire database
我已经尝试 generate scripts。我已经使用了这两个选项:
尝试执行生成的脚本时,它会在初始数据库创建时起作用。
所有后续尝试 运行 生成的脚本都会导致以下错误:
Msg 1781, Level 16, State 1, Line 8739
Column already has a DEFAULT bound to it.
Msg 1750, Level 16, State 0, Line 8739
Could not create constraint or index. See previous errors.
此代码似乎适用于初始数据库创建但不适用于后续执行:
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[cfg].[DF__LookupCol__IsPri__46DD686B]') AND type = 'D')
BEGIN
ALTER TABLE [cfg].[LookupColumns] ADD DEFAULT (CONVERT([bit],(0))) FOR [IsPrimaryKey]
END
GO
我也试过了,结果一样:
ALTER TABLE [cfg].[LookupColumns] ADD CONSTRAINT LookupColumnsIsPrimaryKeyConstraint DEFAULT (CONVERT([bit],(0))) FOR [IsPrimaryKey]
我做错了什么?这个错误是什么意思? 列已经绑定了 DEFAULT?
这确实是因为你没有命名你的约束,所以它第二次尝试删除 旧 名称然后添加一个额外的约束。
第一次 运行 脚本会检查名为 DF__LookupCol__IsPri__46DD686B
的默认约束,这当然不存在。
然后运行s
ALTER TABLE [cfg].[LookupColumns] ADD DEFAULT (CONVERT([bit],(0))) FOR [IsPrimaryKey]
这会创建一个新约束,其名称为 new 自动生成的名称。下次你 运行 脚本时,它会尝试再次删除 DF__LookupCol__IsPri__46DD686B
,但它仍然不存在,然后尝试添加一个新的约束,但失败了。
因此,为了能够重新运行这个脚本,您应该在生成脚本之前命名所有约束和索引。
您可以像这样找到系统命名的默认约束:
select name, object_name(object_id) table_name
from sys.default_constraints
where is_system_named = 1
select name, object_name(object_id) table_name
from sys.check_constraints
where is_system_named = 1
select name, object_name(object_id) table_name
from sys.key_constraints
where is_system_named = 1
等等
或者您可以在名称中查找 __
,但您当然希望手动查看这些名称。
我已经尝试 generate scripts。我已经使用了这两个选项:
尝试执行生成的脚本时,它会在初始数据库创建时起作用。
所有后续尝试 运行 生成的脚本都会导致以下错误:
Msg 1781, Level 16, State 1, Line 8739
Column already has a DEFAULT bound to it.
Msg 1750, Level 16, State 0, Line 8739
Could not create constraint or index. See previous errors.
此代码似乎适用于初始数据库创建但不适用于后续执行:
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[cfg].[DF__LookupCol__IsPri__46DD686B]') AND type = 'D')
BEGIN
ALTER TABLE [cfg].[LookupColumns] ADD DEFAULT (CONVERT([bit],(0))) FOR [IsPrimaryKey]
END
GO
我也试过了,结果一样:
ALTER TABLE [cfg].[LookupColumns] ADD CONSTRAINT LookupColumnsIsPrimaryKeyConstraint DEFAULT (CONVERT([bit],(0))) FOR [IsPrimaryKey]
我做错了什么?这个错误是什么意思? 列已经绑定了 DEFAULT?
这确实是因为你没有命名你的约束,所以它第二次尝试删除 旧 名称然后添加一个额外的约束。
第一次 运行 脚本会检查名为 DF__LookupCol__IsPri__46DD686B
的默认约束,这当然不存在。
然后运行s
ALTER TABLE [cfg].[LookupColumns] ADD DEFAULT (CONVERT([bit],(0))) FOR [IsPrimaryKey]
这会创建一个新约束,其名称为 new 自动生成的名称。下次你 运行 脚本时,它会尝试再次删除 DF__LookupCol__IsPri__46DD686B
,但它仍然不存在,然后尝试添加一个新的约束,但失败了。
因此,为了能够重新运行这个脚本,您应该在生成脚本之前命名所有约束和索引。
您可以像这样找到系统命名的默认约束:
select name, object_name(object_id) table_name
from sys.default_constraints
where is_system_named = 1
select name, object_name(object_id) table_name
from sys.check_constraints
where is_system_named = 1
select name, object_name(object_id) table_name
from sys.key_constraints
where is_system_named = 1
等等
或者您可以在名称中查找 __
,但您当然希望手动查看这些名称。