Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新不是指定用于SQL Server CDC的索引的聚集唯一索引时,解决不可预知的结果_Sql_Sql Server - Fatal编程技术网

更新不是指定用于SQL Server CDC的索引的聚集唯一索引时,解决不可预知的结果

更新不是指定用于SQL Server CDC的索引的聚集唯一索引时,解决不可预知的结果,sql,sql-server,Sql,Sql Server,当SQL Server表为具有一个或多个唯一索引/主键的CDC启用时。如果聚集唯一索引不是指定与CDC一起使用的索引,并且您更新了聚集唯一索引,它将生成一个_uu$Seqval,显示删除的行作为最后一个操作,该操作将中断get net change函数,因为它会说它不存在,而实际上它仍然存在 我认为这是因为唯一聚集索引是如何更新的() 是否有人知道解决此问题的方法,或者是否有我做错的事情会导致此问题的发生。我扔掉了一个连接物品,但我担心那将是一个墓地 复制问题的代码: CREATE DA

当SQL Server表为具有一个或多个唯一索引/主键的CDC启用时。如果聚集唯一索引不是指定与CDC一起使用的索引,并且您更新了聚集唯一索引,它将生成一个_uu$Seqval,显示删除的行作为最后一个操作,该操作将中断get net change函数,因为它会说它不存在,而实际上它仍然存在

我认为这是因为唯一聚集索引是如何更新的()

是否有人知道解决此问题的方法,或者是否有我做错的事情会导致此问题的发生。我扔掉了一个连接物品,但我担心那将是一个墓地

复制问题的代码:

    CREATE DATABASE REPO_CDC_ISSUE
GO
USE REPO_CDC_ISSUE
GO
CREATE TABLE TEST_VICTIM(
    TestVictim_ID int identity(1,1),
    ParentVictim_ID int,
    TextDateColumn_CDE char(6),
    DateColumn_DTE date,
    OtherColumnForPosterity char(20),
    untracked int
)

ALTER TABLE TEST_VICTIM
 ADD CONSTRAINT pk_TEST_VICTIM PRIMARY KEY NONCLUSTERED (TestVictim_ID)

CREATE UNIQUE CLUSTERED  INDEX IDX_TEST_VICTIM_ParentVictim_ID_TextDateColumn_CDE ON TEST_VICTIM(
ParentVictim_ID,TextDateColumn_CDE
)

INSERT INTO TEST_VICTIM VALUES(1,'201401','2015-01-01','30853513',1)
INSERT INTO TEST_VICTIM VALUES(2,'201402','2015-01-01','30853513',1)
INSERT INTO TEST_VICTIM VALUES(3,'201403','2015-01-01','30853513',1)
INSERT INTO TEST_VICTIM VALUES(4,'201404','2015-01-01','30853513',1)

USE [master]
GO
ALTER DATABASE [REPO_CDC_ISSUE] ADD FILEGROUP [CDC]
GO
ALTER DATABASE [REPO_CDC_ISSUE] ADD FILE ( NAME = N'REPO_CDC_ISSSUE_CDC', FILENAME = N'D:\DBData01\REPO_CDC_ISSSUE_CDC.ndf' , SIZE = 51200KB , FILEGROWTH = 10%) TO FILEGROUP [PRIMARY]
GO
USE REPO_CDC_ISSUE
GO
EXEC sys.sp_cdc_enable_db
GO

EXEC sys.sp_cdc_enable_table
    @source_schema = N'dbo'
  , @source_name = N'TEST_VICTIM'
  , @role_name = N'cdc_admin'
  , @capture_instance = N'dbo_TEST_VICTIM' 
  , @supports_net_changes = 1
  , @index_name = N'pk_TEST_VICTIM' 
  , @captured_column_list = N'TestVictim_ID, ParentVictim_ID, TextDateColumn_CDE,DateColumn_DTE,OtherColumnForPosterity' 
  , @filegroup_name = N'PRIMARY';
GO
INSERT INTO TEST_VICTIM VALUES(5,'201301','2013-01-01','30853513',1)
INSERT INTO TEST_VICTIM VALUES(6,'201302','2013-01-01','30853513',1)
INSERT INTO TEST_VICTIM VALUES(7,'201303','2013-01-01','30853513',1)
INSERT INTO TEST_VICTIM VALUES(8,'201304','2013-01-01','30853513',1)
go
select * 
from cdc.dbo_TEST_VICTIM_ct
go

create table #ARD_CHANGES(
TextDateColumn_CDE  varchar(43) ,
DateColumn_DTE   varchar(40),
TestVictim_ID  int
)

insert into #ARD_CHANGES values ('201301','2013-01-01',6),
('201301','2013-02-18',5)
go
UPDATE pte
SET pte.TextDateColumn_CDE = ARDCHG.TextDateColumn_CDE
   ,pte.DateColumn_DTE = ARDCHG.DateColumn_DTE
FROM TEST_VICTIM pte 
INNER JOIN #ARD_CHANGES ARDCHG
ON pte.TestVictim_ID = ARDCHG.TestVictim_ID

WAITFOR DELAY '00:00:30'
select TestVictim_ID ,__$start_lsn,__$seqval,__$operation 
from cdc.dbo_TEST_VICTIM_ct
where TestVictim_ID in (5,6)
order by TestVictim_ID ,__$start_lsn,__$seqval

DECLARE @from_lsn binary(10),
@to_lsn binary(10)

set @from_lsn =sys.fn_cdc_get_min_lsn ('dbo_TEST_VICTIM') 
set @to_lsn = sys.fn_cdc_get_max_lsn ()


SELECT * 
FROM cdc.fn_cdc_get_net_changes_dbo_TEST_VICTIM(@from_lsn, @to_lsn, 'all');

drop table #ARD_CHANGES

EXEC sys.sp_cdc_disable_table
@source_schema = N'dbo',
@source_name   = N'TEST_VICTIM',
@capture_instance = N'dbo_TEST_VICTIM'
GO

EXEC sys.sp_cdc_disable_db
GO
use master 
GO
alter database REPO_CDC_ISSUE SET restricted_user WITH ROLLBACK IMMEDIATE
GO
DROP DATABASE REPO_CDC_ISSUE