涉及参数和变量的 SAP HANA 查询中的 "national" 字符(unicode)

The "national" character (unicode) in SAP HANA queries involving parameters and variables

为什么在 SAP HANA "SQL" 查询中为输入参数指定值时我不能使用 N' 处理非英语字符,而我可以为输入变量处理?

例如,以下查询有效(注意输入变量生成的 WHERE 子句中的 N'):

SELECT 
       "NDATA", "DATA", "CC_NON_ENGLISH"
      , sum("ID") AS "ID" 
FROM 
    "_SYS_BIC"."Test/MY_VIEW" 
    ('PLACEHOLDER' = ('$CC_PARAM$', 'दिल्ली भारत की राजधानी है.')) 
WHERE 
    (("NDATA" IN (N'दिल्ली भारत की राजधानी है.'))) 
GROUP BY 
      "NDATA", "DATA", "CC_NON_ENGLISH"

但是,如果我在 CC_PARAM 变量的值前面添加 N',则会出现语法错误。

 SELECT 
        "NDATA", "DATA", "CC_NON_ENGLISH"
      , sum("ID") AS "ID" 
 FROM 
       "_SYS_BIC"."Test/MY_VIEW" 
         ('PLACEHOLDER' = ('$CC_PARAM$', N'दिल्ली भारत की राजधानी है.')) 
 WHERE (("NDATA" IN (N'दिल्ली भारत की राजधानी है.'))) 
 GROUP BY  
         "NDATA", "DATA", "CC_NON_ENGLISH" 

产生的错误:

Could not execute 'SELECT "NDATA", "DATA", "CC_NON_ENGLISH", sum("ID") AS "ID" FROM ...' 
 SAP DBTech JDBC: [257]: sql syntax error: 
 incorrect syntax near "दिल्ली भारत की राजधानी है.": line 7 col 3 (at pos 173)

通常,在 HANA 中编写 SQL 查询时,Unicode 字符串什么时候需要在前面加上 N',什么时候不需要?

我注意到我可以在没有任何 N' 的情况下执行有问题的查询并且它工作正常,那么这里发生了什么?

字符串 文字 N' 修饰符将这些字符串文字标记为 SQL 的 Unicode 字符串。在数据库应将结果值视为 Unicode 字符串的意义上,这与使用 TO_NVARCHAR() 提供字符串几乎相同,除了对于文字版本,客户端保证该字符串是 Unicode 字符串。

这是 SQL 标准行为。

对于 SAP HANA 特定的(阅读 专有PLACEHOLDER 子句(用于提供计算视图参数的值)始终将输入字符串作为 Unicode 字符串。 此外,它不允许使用 N' 修饰符(或 SQL 函数)。

简而言之:当您想在 SQL 中指定 Unicode 字符串文字时,您 can/should 使用 N' 修饰符。 当您使用 SAP HANA 特定语法和命令时,您总是隐式提供一个 Unicode 字符串并且不得使用 N' 修饰符。