命名列是否有规则?

因此,我们有一个SQL Server 2017实例,其默认排序规则为Vietnam_100_CI_AS_KS。

创建临时表时,我们看到如果使用了特定名称,它将以某种方式将一个字母区分大小写。

示例:

CREATE TABLE #MaterialTest
(
    Product VARCHAR(50),Quality VARCHAR (50),MaterialOriginGroup VARCHAR (50) 
)

INSERT INTO #MaterialTest VALUES ('Papers','Good','Test1')

如果我使用以下方法查询此表:

Select Product,Quality,MaterialOriginGroup from #MaterialTest

工作正常。如果我用几乎其他任何东西查询它,它都可以正常工作

但是,如果我在MaterialOriginGroup中为“ Group”使用小写字母“ G”,则会失败。

示例:

Use TempDB
Select product,quality,materialorigingroup from #MaterialTest
  

消息207,级别16,状态1,第2行无效的列名称   “ materialorigingroup”。

如果我用以下方式查询它:

Use TempDB
Select product,materialoriginGroup from #MaterialTest

有效。

知道为什么吗?

renchao568 回答:命名列是否有规则?

基于我自己的研究和@Larnu的SQL Fiddle,我设计了一个小脚本来测试两个字母的组合:

DECLARE @Letter VARCHAR(2);
SET @Letter = 'ch';

DECLARE @LetterA VARCHAR(1);
DECLARE @LetterB VARCHAR(1);
SET @LetterA = LEFT(@Letter,1);
SET @LetterB = RIGHT(@Letter,1);

SELECT CASE WHEN V.G = UPPER(@Letter) COLLATE Vietnamese_100_CI_AS_KS THEN 1 ELSE 0 END,CASE WHEN V.G = LOWER(@Letter) COLLATE Vietnamese_100_CI_AS_KS THEN 1 ELSE 0 END,CASE WHEN V.G = CONCAT(LOWER(@LetterA),UPPER(@LetterB)) COLLATE Vietnamese_100_CI_AS_KS THEN 1 ELSE 0 END,CASE WHEN V.G = CONCAT(UPPER(@LetterA),LOWER(@LetterB)) COLLATE Vietnamese_100_CI_AS_KS THEN 1 ELSE 0 END
FROM (VALUES(@Letter COLLATE Vietnamese_100_CI_AS_KS)) V(G);

这将输出1或0,具体取决于比较对于两个字母组合是否有效。比较是:

  • 大写字母(即NG)
  • 小写字母(即ng)
  • 一个大写字母,一个小写字母(即Ng)
  • 一个小写字母,一个大写字母(即nG)

ab运行此操作会产生:

1 1 1 1

因此ab不会出现此问题。但是,对于ch,您将获得:

1 1 0 1

所以ch 确实出现相同的问题。

这似乎与越南语字母中声明的辅音有关,其中包括以下两个字母的辅音:

Ch = 1 1 0 1 (has the same issue)
Gh = 1 1 0 1 (has the same issue)
Gi = 1 1 0 1 (has the same issue)
Kh = 1 1 0 1 (has the same issue)
Ng = 1 1 0 1 (has the same issue)
Nh = 1 1 0 1 (has the same issue)
Ph = 1 1 0 1 (has the same issue)
Qu = 1 1 0 1 (has the same issue)
Th = 1 1 0 1 (has the same issue)
Tr = 1 1 0 1 (has the same issue)

不幸的是,我不知道为什么受此问题影响,这没有帮助。另外,我不知道为什么为什么仅在列名是小写字母后跟大写字母时才影响列名。

也许其他人可能会看到并知道答案?

字母的引用为here

本文链接:https://www.f2er.com/2962130.html

大家都在问