SQL Server 6.5死锁与西班牙字母ú和ü

时间:2011-04-18 15:54:47

标签: sql-server ado deadlock sql-server-6.5

我们通过ADO运行SQL 6.5,我们遇到了最奇怪的问题。

这句话将开始产生死锁

insert clinical_notes ( NOTE_ID, CLIENT, MBR_ID, EPISODE, NOTE_DATE_TIME,  
NOTE_TEXT, DEI, CARE_MGR, RELATED_EVT_ID, SERIES, EAP_CASE, TRIAGE, CATEGORY,  
APPOINTMENT, PROVIDER_ID, PROVIDER_NAME )  
VALUES ( 'NTPR3178042', 'HUMANA/PR', '999999999_001', 'EPPR915347',  
'03-28-2011 11:25', 'We use á, é, í, ó, ú and ü (this is the least one we   
use, but there''s a few words with it, like the city: Mayagüez).', 'APK', 'APK', 
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )

触发器是字符úü。如果它们在NOTE_TEXT列中。 NOTE_TEXT是一个文本列。

上有索引
UNC_not_id
NT_CT_MBR_NDX
NT_REL_EVT_NDX
NT_SERIES_NDX
idx_clinical_notes_date_time
nt_ep_idx

NOTE_ID是主键。

发生此声明后,如果我们发出相同的声明,但是使用新的NOTE_ID值,我们会收到死锁。

如上所述,仅当úü位于NOTE_TEXT时才会发生这种情况。

这是一个测试服务器,发生错误时通常只有一个会话访问该表。

我确信它在字符集等方面有所不同,但对于我的生活,我无法解决这个问题。

1 个答案:

答案 0 :(得分:0)

  1. 列(var)是基于字符的还是基于字符的n(var)?使用unicode的值是高于255还是ascii 255或更低(250和252)?

  2. 尝试将列更改为二进制排序规则,只是为了查看是否有帮助(可能会解决问题)。我不知道这是否适用于SQL 2000(虽然我可以在星期一查看),但您可以尝试这样来查找服务器上可用的排序规则:

    SELECT * FROM ::fn_helpcollations()
    

    拉丁文将军BIN应该在某处。

    假设您找到了要进行的排序规则,您可以像这样更改排序规则:

    ALTER TABLE TableName ALTER COLUMN ColumnName varchar(8000) NOT NULL COLLATE Collation_Name_Here
    

    将您的表格编入脚本以了解它现在使用的排序规则,以便在不起作用或导致问题时将其设置回来。或者使用备份。 :)

  3. 另外需要注意的是,如果您使用的是unicode,则在文字字符串之前需要N,例如:

    SELECT N'String'