gpt4 book ai didi

sql-server - 无法解决 select 语句中第 5 列的排序规则冲突

转载 作者:行者123 更新时间:2023-12-03 01:24:06 25 4
gpt4 key购买 nike

我试图将多个字段的组合显示为一个。 (客户要求我这样做)。我尝试了以下命令,但收到上述错误:

SQL 片段:

SELECT        dbo.VPayment_2.Serial, dbo.VPayment_1.Description, dbo.VPayment_2.Money, dbo.VPayment_1.PaymentType,, 
'Payment ' + dbo.VPayment_1.PaymentType + ' - ' + ' Serial ' + CAST(dbo.VPayment_2.Serial AS nvarchar(15))
+ '(' + dbo.VPayment_1.Description + ')' AS Compact Info
FROM dbo.VPayment_2 INNER JOIN
dbo.VPayment_1 ON dbo.VPayment_2.ID = dbo.VPayment_1.ID

最终结果如下:

---------------------------------------------------------------------------
Serial Description Money PaymentType Compact Info
123456 some info 500$ Check Payment :Check - Serial 123456 - some info
0 some info2 100$ In Cash Payment :In Cash - Serial 0 - some info

为了实现此目的,我从相关表中创建了两个 View ,然后使用我内部连接的 ID 将这两个 View 连接起来,以便获得预期的结果。问题是当我添加“紧凑信息”字段(它是其他字段的组合)时,它会生成错误:

Can not resolve collation conflict on column 5 in select statement

当我不比较任何东西时就会发生这种情况。

最佳答案

听起来 dbo.VPayment_1.PaymentTypedbo.VPayment_2.Serial 具有不同的排序规则(这不仅在比较时发生,而且在合并时也会发生,连接等)。

有几个修复:

  1. 更改一个 View 或两个 View 以对这些列使用相同的排序规则。您可以通过更改基础列或在 View 的 SELECT 列表中指定 COLLATE 子句来完成此操作,例如

    SELECT PaymentType COLLATE Latin1_General_CI_AI
    ... FROM ...
  2. 在您的查询中明确整理,例如

    ... 'Payment ' + dbo.VPayment_1.PaymentType COLLATE Latin1_General_CI_AI
    + ' - ' + ' Serial ' + CAST(dbo.VPayment_2.Serial COLLATE Latin1_General_CI_AI
    AS nvarchar(15))
  3. 最好的解决方案是更正所有字符串列以使用相同的排序规则。我遇到过很多情况,人们在不同的表、数据库或服务器中使用不同的排序规则,但尚未得到有效的解释 - 大多数时候他们不知道为什么排序规则不同。

关于sql-server - 无法解决 select 语句中第 5 列的排序规则冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15095183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com