2017-01-04 11 views
0

同じ列に2つのタグ値があります。SQL Serverは「値」と同じ「値」です

value1 = "(Massachusetts)" 
value2 = "(Massachusetts)" + CHAR(10) 

私は(空白で)"value "に新しい行のバージョンを変換したいが、私は主キーの重複エラーが発生します。

オブジェクトのdbo.Contact.Tag '内の重複するキーを挿入することはできませんPRIMARY KEY制約 'Contact.Tag'。の

「違反。重複したキー値である(id_num_removed、id_num_removed、(マサチューセッツ州))。 声明終了しました」

これは私が実行している文です。

update [Contact.tag] 
SET TAG_NAME = '(Massachusetts) ' 
where 
    instance_id = 97986 
    and contact_id = 93941676 
    and TAG_NAME = '(Massachusetts)' + CHAR(10); 

私は置き換えてバージョンを試しても同じエラーが発生します。

UPDATE [blah].[dbo].[Contact.Tag] 
SET TAG_NAME = REPLACE(TAG_NAME, CHAR(10), ' ') 
where TAG_NAME LIKE '%' + CHAR(10) + '%' 

SQLサーバーが"value" = "value "

任意の提案と考えるように思えますか?

+1

バイナリ照合は使用できますが、その他の問題があります。はい、末尾の空白だけが異なる文字列が等しいと比較されるのは、[文書化された機能](https://support.microsoft.com/en-us/kb/316626)です。もちろん、改行は空白とみなされません。なぜなら、それはちょっとばかげているからでしょうか? * \ *咳\ ** –

+0

重複タグはありますか? SELECT * FROM [Contact.tag]を試してください。どこにTAG_NAME LIKE '(Massachusetts)%'; –

答えて

0

Sqlサーバーでは、後続スペースは考慮されません。それを複製したい場合は、接尾辞の代わりにスペース文字の接頭辞を付けてください。

update [Contact.tag] SET TAG_NAME = '(Massachusetts) ' where instance_id = 97986 and contact_id = 93941676 and TAG_NAME =Char(10)+ '(Massachusetts)'

関連する問題