Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 这种混乱的TSQL语法是否更有效?真的那么令人困惑吗?_Sql Server - Fatal编程技术网

Sql server 这种混乱的TSQL语法是否更有效?真的那么令人困惑吗?

Sql server 这种混乱的TSQL语法是否更有效?真的那么令人困惑吗?,sql-server,Sql Server,我本来会搜索的,但我甚至不知道如何搜索像这样的东西,所以我来了 我在一家公司工作,我正在研究许多较旧的存储过程(目前我们使用的是sql server 2012,我不知道它们是何时编写的,但可能是3-5年前)。我经常在select语句中遇到这些小金块,它们让我非常困惑。最终,它们都是以数学为基础的,所以这些东西可能有性能方面的原因?也许他们比我想象的更普遍,而我只是没有接触过他们 这里有一个例子,假设它被隐藏在一个SELECT子句中,从一个有数字“balance”列的表中进行选择(如果我的参数不完

我本来会搜索的,但我甚至不知道如何搜索像这样的东西,所以我来了

我在一家公司工作,我正在研究许多较旧的存储过程(目前我们使用的是sql server 2012,我不知道它们是何时编写的,但可能是3-5年前)。我经常在select语句中遇到这些小金块,它们让我非常困惑。最终,它们都是以数学为基础的,所以这些东西可能有性能方面的原因?也许他们比我想象的更普遍,而我只是没有接触过他们

这里有一个例子,假设它被隐藏在一个SELECT子句中,从一个有数字“balance”列的表中进行选择(如果我的参数不完全匹配,请原谅我……你会明白的)

我的意思是,不难看出它实际上是通过浓缩2个字符串('Y'+'')或('+'N')来产生'Y'或'N',每个字符串都是通过使用3个函数将值(平衡)减少到1或0乘以1来确定每个左函数中要包含多少个字符(最终是0或1)而生成的

但是别这样

下面是另一个例子:

sum(x.amount * charindex('someCode', x.code) * charindex(x.code, 'someCode'))
这实际上是说x.code必须等于'someCode'或返回0;否则返回x.amount。如果任何一个charindex失败,它会在混合中抛出一个*0,计算结果为0'ing

还有很多其他人,他们不是不可能知道他们在做什么。。。但我还是要花时间弄清楚他们在干什么

这种默默无闻是否像我认为的那样默默无闻?如果是这样,是否值得权衡(假设存在权衡)


谢谢

嗯,正如你所说,这并不是很难懂。我看不出有什么取舍,似乎仅仅使用一个
大小写
表达式就足够了,谢谢@Lamak;我所说的“晦涩难懂”是:这是一个众所周知(我从未接触过)的常见做法/技巧吗?比如,一个更有经验的sql程序员会不会看一眼,然后说“哦,是的,这是‘必须匹配字符串’的把戏”或者其他什么。我会非常怀疑你最后的评论是不是真的。这是有争议的,但我几乎总是会为了可读性/可维护性而牺牲一些性能。诚然,这是注释的目的,但出于性能原因,他们不太可能以这种方式编写代码。我只是无法想象有人会对每个方程做那么多的测试,看看有什么可以节省一秒钟。@scsimon我同意可读性(通常)更好。不幸的是,这里也没有评论。我怀疑对每个函数都进行了专门的测试,我想知道“当然这是一种更好的方法”这是否更“一般的智慧”。
sum(x.amount * charindex('someCode', x.code) * charindex(x.code, 'someCode'))