SQL 服务器快照复制:table 创建时出错
SQL Server snapshot replication: error on table creation
我收到以下错误(来自复制监视器):
The option 'FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME' is only valid when used on a FileTable. Remove the option from the statement. (Source: MSSQLServer, Error number: 33411)
尝试的命令是:
CREATE TABLE [dbo].[WP_CashCenter_StreamLocationLink](
[id] [bigint] NOT NULL,
[Stream_id] [int] NOT NULL,
[Location_id] [numeric](15, 0) NOT NULL,
[UID] [uniqueidentifier] NOT NULL
)
WITH
(
FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME=[UC_StreamLocation]
)
现在,对我来说,这里有两件事不清楚。
Table 已存在于订阅者中,我已为文章设置 @pre_creation_cmd = N'delete'
。所以我不希望 table 被删除并重新创建。事实上,table 仍然存在于订阅者端,尽管 create table
命令未能完成。我错过了什么?这个 create table
命令来自哪里,为什么?
我不明白为什么这个 FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME
选项会出现在创建脚本中。我尝试在 SSMS 中从 table 生成 create table
脚本,事实上,它就在那里。但奇怪的是,我无法以这种方式删除并重新创建 table - 我收到了完全相同的错误消息。
编辑:好的,我想现在我知道为什么 table 仍然存在 - 我在 sql 服务器分析器中注意到 begin tran
。
如果发布者上的 table 确实未定义为 FileTable,则问题与名为 "Stream_id" 的列有关。我相信 SQL 2012 中存在一个已知问题,如果您有一个名为 "Stream_id" 的列,这是为 FileTable/FileStream 保留的,它会自动添加该约束,不幸的是会破坏复制.此处的解决方法是将列重命名为 "Stream_id" 以外的名称。
另一种解决方法是将架构选项设置为not复制约束(猜测这会起作用)。如果您需要对订阅者进行限制,您可以尝试在事后手动将它们应用到订阅者上(或编写脚本并使用@post_snaphsot_script)。
我收到以下错误(来自复制监视器):
The option 'FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME' is only valid when used on a FileTable. Remove the option from the statement. (Source: MSSQLServer, Error number: 33411)
尝试的命令是:
CREATE TABLE [dbo].[WP_CashCenter_StreamLocationLink](
[id] [bigint] NOT NULL,
[Stream_id] [int] NOT NULL,
[Location_id] [numeric](15, 0) NOT NULL,
[UID] [uniqueidentifier] NOT NULL
)
WITH
(
FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME=[UC_StreamLocation]
)
现在,对我来说,这里有两件事不清楚。
Table 已存在于订阅者中,我已为文章设置
@pre_creation_cmd = N'delete'
。所以我不希望 table 被删除并重新创建。事实上,table 仍然存在于订阅者端,尽管create table
命令未能完成。我错过了什么?这个create table
命令来自哪里,为什么?我不明白为什么这个
FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME
选项会出现在创建脚本中。我尝试在 SSMS 中从 table 生成create table
脚本,事实上,它就在那里。但奇怪的是,我无法以这种方式删除并重新创建 table - 我收到了完全相同的错误消息。
编辑:好的,我想现在我知道为什么 table 仍然存在 - 我在 sql 服务器分析器中注意到 begin tran
。
如果发布者上的 table 确实未定义为 FileTable,则问题与名为 "Stream_id" 的列有关。我相信 SQL 2012 中存在一个已知问题,如果您有一个名为 "Stream_id" 的列,这是为 FileTable/FileStream 保留的,它会自动添加该约束,不幸的是会破坏复制.此处的解决方法是将列重命名为 "Stream_id" 以外的名称。
另一种解决方法是将架构选项设置为not复制约束(猜测这会起作用)。如果您需要对订阅者进行限制,您可以尝试在事后手动将它们应用到订阅者上(或编写脚本并使用@post_snaphsot_script)。