问题(在我看来)是标识符加倍配额。

2020-09-24 04:06发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


SAP SQL Anywhere 16.0.0.2043有一个问题(在我看来),标识符中有双重配额:

我的示例:
ISQL。 运行脚本:
CREATE TABLE DBA.TestTable(
ID整数NOT NULL
,数量整数NOT NULL约束TestTableAmount check(Amount> 0)
,名称varchar(40)NOT NULL
, 主键(ID ASC)


在Sybase Central中,我打开:
表-> TestTable->约束-> TestTableAmount->定义-> check(" Amount" > 0)。

为什么变量Amount->" Amount"中有双引号?
在以前的版本(10和更早的版本)中没有双引号。

分析 标识符中的引号限制了sql-server的工作。
我从来没有在标识符中使用引号。
它们在很大程度上妨碍了编写程序。
这确实妨碍了对程序文本的正常理解。
解决这个问题,或者至少考虑一下。
实际上,这是一个非常严重的全球性问题。

也许某些问题已经解决,但我没有下载更新的权限。
对不起,我的英语。
我的母语是俄语。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


SAP SQL Anywhere 16.0.0.2043有一个问题(在我看来),标识符中有双重配额:

我的示例:
ISQL。 运行脚本:
CREATE TABLE DBA.TestTable(
ID整数NOT NULL
,数量整数NOT NULL约束TestTableAmount check(Amount> 0)
,名称varchar(40)NOT NULL
, 主键(ID ASC)


在Sybase Central中,我打开:
表-> TestTable->约束-> TestTableAmount->定义-> check(" Amount" > 0)。

为什么变量Amount->" Amount"中有双引号?
在以前的版本(10和更早的版本)中没有双引号。

分析 标识符中的引号限制了sql-server的工作。
我从来没有在标识符中使用引号。
它们在很大程度上妨碍了编写程序。
这确实妨碍了对程序文本的正常理解。
解决这个问题,或者至少考虑一下。
实际上,这是一个非常严重的全球性问题。

也许某些问题已经解决,但我没有下载更新的权限。
对不起,我的英语。
我的母语是俄语。

付费偷看设置
发送
5条回答
土豆飞人
1楼-- · 2020-09-24 04:23

您好,

出于一致性目的,我们在版本16中引入了此行为,该行为在版本17中存在。到目前为止,我们还没有打算将其改回,但是我们的开发团队确实对此进行了调查。 不幸的是,他们找不到允许您禁用它的方法。

致谢,
Evgeniya

歪着头看世界
2楼-- · 2020-09-24 04:19
Лев,

Приведитепожалуйстаболееконкретныйпримертого,和гдеэтовызываетнеудобство? Последующийпримериспользования金额безкавычеквозвращаетправильныйрезультат:

插入TestTable(ID,Amount,Name)值(1,1,'t2');
插入TestTable(ID,Amount,Name)值(2,2,'t2');
从testTable中选择*;
从testTable中选择*其中Amount> 1;

me_for_i
3楼-- · 2020-09-24 04:19
这确实阻碍了人们对程序文本的正常理解。

Lev,您能解释一下为什么所做的更改会使"编程SQL"变得更加困难吗?

我也不喜欢这种更改,而且我也从不使用需要使用引号有效的用户标识符。

但是,我使用的代码与我自己编写的代码完全相同,并且不依赖SQL Central的输出。 因此,对于过程/触发器来说,我的原始(因此未引用)代码存储在相应系统表的"源"列中,例如" SYSPROCEDURE"。 (以及源代码管理工具中的其他内容。)

一只江湖小虾
4楼-- · 2020-09-24 04:30

Добрыйдень,Евгения。

Привожупример:

 SQL Anywhere 10.0.1中的SQL-текстSQL-текстбезкавычек:
 检查((SubStr(NumAutoclaveGrill,1,3)='НЕТ')或
 (Abs(cast(SubString(NumAutoclaveGrill,1,Length(NumAutoclaveGrill)-
 (如果in('А'中为" Right"(NumAutoclaveGrill,1),则为1,否则为0
 endif))作为smallint))在1到1000)之间。

 SAP SQL Anywhere 16的SQL-текст:SQLSQL-текст/скавычками:
 check(("" SubStr"("" NumAutoclaveGrill",1,3)='НЕТ')或
 (" Abs"(cast(" SubString"("" NumAutoclaveGrill",1," Length"(" NumAutoclaveGrill")-
 (如果in('А')中的" Right"(" NumAutoclaveGrill",1),然后是1 else 0 endif))作为smallint))
 1至1000之间))
 

Такойтексткаквпоследнемабзацемной,какпрограммистом,воспринимается "ужасно",结果,(т.е.оченьнеудобныйдлявосприятиятекст,т.е.текст,которыйнадоанализироватьинадкоторымнадодумать),< BR>чтообязательноскажетсянамоейработоспособности,поверьтемоемуопыту。结果Преждечемдатьимяпеременнойябудудолгодуматьипридумаюподходящеена点击английскомязыке。 Затопотомстакойпеременной(т.е.поSQL-документацииидентификатор,标识符)
мнеудобноработать,т。 ясмотрюнанеепонесколькочасоввдень。结果,Ноесливтекстепрограммыбудетстолькокавычек(порядка20ввышеприведенномабзаце),结果,тоихсозерцаниеинаписание(написанием.б.инет,т.к. SQL Anywhere的16самихдобавляет),点击атакжепостоянныемыслиобэтой "особенности"(功能)SQL-серверабудетпостояннымстрессомвмоейработе。结果Когдаядолгосмотрюнатекстпрограммы,тоонкакбыотпечатываетсяв моейзрительнойпамяти。结果Япотоммогудуматьокаком-тосложноммоментевнаписаниипроцедуриливотэтихконстрейнтов,点击представляявпамятитекстпрограммы。 Икавычкивэтомтекстесовершеннонекместу。结果Ониявномешаютмоемунормальномуцелостномузрительномувосприятиютекстапрограммы。结果(Адлячеготогдаязыкверхнегоуровня?)点击Кавычкисильноотвлекаютмоевниманиеоттого,чтобыпогрузиться всмыслсамойпроцедуры。结果Яуженеговорюотом,чтоSQL-серверупостояннонужнообрабатыватьэти点击кавычки,включатьиисключатьихизидентификаторов。结果Янемогупонять,зачемнужнохранитьSQL-текстс
Япосмотрел,чтоиView SQL Anywhere 16发行说明(SYSTABLE.View_defn)。

在SQL Anywhere 10.0.1中:






SQL Anywhere 10.0.1: 检查(存在(从STA.ProdTree中选择*,其中((KodDown = Prod) 和(KodUp in(2000,2400,3000,3901,4000,4701,4720,10000,11000)) 或(产生于(2810,4800))))) SAP SQL Anywhere 16: 检查(存在(从*" STA"中选择*。" ProdTree"其中(("" KodDown" =" Prod") and(" KodUp" in(2000,2400,3000,3901,4000,4701,4720,10000,11000)) 或(" Prod" in(2810,4800))))) Ещёпример: 不带引号: check(((((tare不为null)并存在(从STA.UnForming1中选择*作为A,其中(A.ID = IDH) 和(ForemanPackage不为空)))或(皮重为空)) 和((AmountLine14不为空)或(AmountLine2不为空))) 带引号: 检查(((((" Tare"不为null)和 存在(从" STA"中选择*。" UnForming1"作为" A",其中(" A"。" ID" =" IDH") 和(" ForemanPackage"不为空)))或(" Tare"为空)) 和((" AmountLine14"不为空)或(" AmountLine2"不为空))) 不带引号: check(((Prod in(4702,4703,4704,4705))和(Movement = 2))或 ((Prod in(4721,4722,4723,4724))和(Movement = 3)) 是否(Prod in(4702,4703,4704,4705,4721,4722,4723,4724))) 带引号: 检查((((" Prod" in(4702,4703,4704,4705)和(" Movement" = 2))或 (((" Prod" in(4721,4722,4723,4724))和(" Movement" = 3)) 是否((Prod" in(4702,4703,4704,4705,4721,4722,4723,4724)))

Евгения,спасибозавниманиекизложеннойпроблеме。
最诚挚的问候。
Lev Zusman。

SAP小黑
5楼-- · 2020-09-24 04:14

Лев,

Мыненашлиспособаотключитькавычки。
Вамнеобязательнодобавлятьихпринаписаниипроцедур,

Суважением,
Евгения

一周热门 更多>