私は一見したところではかなり馬鹿に見えますが(エラーメッセージは十分説明力があるようです)、実際には以下の結果に応じて、より無Idsが大きくなっているバグやコーナーケース...私はSQL Server 2014 - 既存の "重複"がないため、プライマリキーの列に値を挿入できません
完全に混乱している私は、SQL挿入コード
USE Broker2
GO
DBCC CHECKIDENT ('Broker2.dbo.Properties');
DBCC CHECKIDENT ('Broker2.dbo.Properties', RESEED, 9999);
GO
SET IDENTITY_INSERT Broker2.dbo.Properties ON
INSERT INTO Broker2.dbo.Properties
(Id, IsActive, Phone, Phone2, [Address], ExhibitionPoleId, RegionId, PropertyTypeId, FurnishingId, Price, IsDeposited, DepositAmount, IsArchived,
CreatedOn, IsDeleted, OfficeId, DealTypeId, AssignedTo, HasTransition, BrokerNote)
SELECT
convert(int, '10000' + convert(varchar, cp.Id)),
cp.is_active,
(select SUBSTRING(op.phone, 0, 11) from recrm_merged.dbo.contact_phones op where op.id = ccp.id) as phone,
(select SUBSTRING(op.phone, 12, 35) from recrm_merged.dbo.contact_phones op where op.id = ccp.id) as phone2,
cp.[address],
me.broker_id,
mr.Broker_Id,
mp.Broker_Id,
mf.Broker_Id,
cp.price,
cp.with_deposit,
0,
case when cp.property_status_id = 1 then 0 else 1 end as IsArchived,
cp.created_at,
0,
2,
md.Broker_Id,
cp.bound_to_broker_id,
0,
(cp.[description] + '; ' + cp.furniture_details)
FROM recrm_merged.dbo.properties cp
join recrm_merged.dbo.contacts cc on cp.contact_id = cc.Id
join recrm_merged.dbo.contact_phones ccp on cc.id = ccp.contact_id
join Broker2.dbo.map_exhibition_types me on cp.exposure_id = me.crm_id
join Broker2.dbo.map_regions mr on cp.district_id = mr.Crm_Id
join Broker2.dbo.map_property_types mp on cp.property_type_id = mp.Crm_Id
join Broker2.dbo.map_furnishings mf on cp.furnishing_id = mf.Crm_Id
join Broker2.dbo.map_deal_types md on cp.action_type_id = md.Crm_Id
SET IDENTITY_INSERT Broker2.dbo.Properties OFF
の下に、私はまた、このテーブルを持っている「プロパティ」、 8469
select top 1000 * from Properties
order by id desc -- results in 8469, 8468, 8467 ...
このエラーが表示されることは少なくありません。 "PRIMARY KEY制約 'PK_dbo.Properties'違反。オブジェクト 'dbo.Properties'に重複キーを挿入できません。重複したキー値が(100003)である。」
テーブルrecrm_merged.dbo.propertiesから非常に最初のIDレコードが、私は、Management Studioを再起動万
で開始すること、新たに移したIDを持つ必要がある3です。誰かが肩を与える場合、それははるかにappriciatedされるだろうPCおよびオフにして、自分の部屋で点灯しますが、問題は消えません...
!
EDIT
select * from recrm_merged.dbo.properties
where Id = 3 -- returns only 1 record.
USE [Broker2]
GO
/****** Object: Index [PK_dbo.Properties] Script Date: 18.9.2017 г. 21:46:00 ******/
ALTER TABLE [dbo].[Properties] ADD CONSTRAINT [PK_dbo.Properties] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO
EDIT 2
実際、私のセレクトは3つのレコードを返してくれました。これはどのように可能ですか
Id is_active phone phone2 address broker_id Broker_Id Broker_Id Broker_Id price with_deposit (No column name) IsArchived created_at (No column name) (No column name) Broker_Id bound_to_broker_id (No column name) (No column name)
100003 0 0889525467 басанович 9 4 221 11 1 260 0 0 1 2016-05-05 17:30:32 0 2 1 NULL 0 ;
100003 0 123123 басанович 9 4 221 11 1 260 0 0 1 2016-05-05 17:30:32 0 2 1 NULL 0 ;
100003 0 aaaa басанович 9 4 221 11 1 260 0 0 1 2016-05-05 17:30:32 0 2 1 NULL 0 ;
PRIMARY KEY制約違反は、主キーの重複値をテーブルに挿入しようとしていることを意味します。テーブルスキーマ情報を投稿して、プライマリキーが何であるかを確認してください。 –
ここでは多くの詳細を扱うことはできません。しかし、私はあなたが3の値を持つあなたのselectステートメントに1つ以上の行を持っていると思う。それはそれが主キーの制約に違反するため、挿入に失敗します。 –
そう、ショーンが言ったように、これは、あなたが3のidであなたのレコードを複製することを期待しているよりも、ジョインがもう少し多くの参加をしている問題です。 – 0x11