sql*_*ess 8 sql-server-2008-r2 transactional-replication
现在我在 SQL Server 2008 R2 中遇到事务复制的“身份危机”。数据库在兼容性 90 中运行。有一个表具有标识列并且不会复制。错误是“当 IDENTITY_INSERT 设置为 OFF 时,无法为表 '' 中的标识列插入显式值。(来源:MSSQLServer,错误号:544)”。
该表的“不用于复制”设置为 true。我也找不到文章的任何设置来指定这一点。
任何想法表示赞赏。
只是补充一点,您不必删除并重新创建复制来更改“不用于复制”位。
您可以使用 T-SQL 做到这一点,而无需生成快照或中断复制——
sys.sp_identitycolumnforreplication
1 = 不用于复制
0 = 用于复制,这会导致订阅方身份列出现问题
要为所有表更改它:
EXEC sp_msforeachtable @command1 = '
declare @int int
set @int =object_id("?")
EXEC sys.sp_identitycolumnforreplication @int, 1'
Run Code Online (Sandbox Code Playgroud)
只为1张表改,先找出表的object_id,然后在下面运行
EXEC sys.sp_identitycolumnforreplication table_object_id, 1
Run Code Online (Sandbox Code Playgroud)
下面的 tsql 会给你一个很好的输出命令,可以在运行整个数据库之前查看:
if exists (select 1 from sys.identity_columns where is_not_for_replication = 0)
begin
SELECT QUOTENAME(SCHEMA_NAME(t.schema_id)) as SchemaName,
QUOTENAME(t.name) AS TableName,
c.name AS ColumnName,
c.object_id as ObjectID,
c.is_not_for_replication,
'EXEC sys.sp_identitycolumnforreplication '+cast(c.object_id as varchar(20)) + ', 1 ;' as CommandTORun_SetIdendityNOTForReplication
FROM sys.identity_columns AS c
INNER JOIN sys.tables AS t ON t.[object_id] = c.[object_id]
WHERE c.is_identity = 1
and c.is_not_for_replication = 0
end
else
print 'There are no identity columns that needs NOT FOR REPLICATION set to 1'
Run Code Online (Sandbox Code Playgroud)
对于 Adventureworks 数据库:
归档时间: |
|
查看次数: |
8240 次 |
最近记录: |