【发布时间】:2018-09-20 14:54:56
【问题描述】:
我不太习惯写很长的 SP。而且我发现在使用这些宽表时很快就变得难以管理。即使是一个简单的 UPSERT 也需要很长的一行代码或数十行代码(我发现 col/line 样式对我来说更容易阅读,但使用那些非常宽的表对我来说真的很痛苦)。渐渐地,我发现自己开始使用 BEGIN/END 将这些 UPSERT 和其他基本操作包装在同一张表等上,以将它们分组为逻辑部分。这样在 IDE 中它们可以轻松折叠和展开,以便使用 cmets 进行检查和查看。注意:我不是为任何控制块编写它们。只需简单的 BEGIN/END 即可将它们包装成可折叠的部分。
在分组和折叠/展开冗长的代码中添加一些额外的 BEGIN/END 会导致任何副作用吗?目前我还没有看到... 如果是这样,他们会是什么?有没有更好的方法在 SP 中组织这些代码?
哦,我的意思是折叠
CREATE PROCEDURE/MULT_STATEMENT_FUNCTION
...
BEGIN
-- UPSERT QC records
BEGIN
UPDATE QC_SECT1 <-- fold[]
SET COL1=...
COL2=
.....
IF @@ROWCOUNT.... <--fold[ click 1]
INSERT INTO ... <-Fold[click 2]
(
COL1
....
VALUES <-Fold[click 3]
(
...
END
-- calculate distribution
BEGIN
DECLARE @GRP1_.....
DECLARE @GRP2_....
WITH .....
....
) AS PRE_CAL1 <-- fold[click 1]
) AS PRE_CAL2 <-- fold[click 2]
) AS ... <-- fold[click 3]
END
END
我发现检查长脚本非常不方便,逐渐我发现自己开始使用 BEGIN/END。在 VSCode 中,折叠单个 CTE 语句需要多次点击。 BEGIN/END 让它变得容易多了。但我真的很想确定,我做错了什么。
PS:按行分组列的想法非常有效,我完全同意。 关于 col/line 样式。并不是我真的很喜欢它。但我想在我目前的情况下,很多人可能也会喜欢它。供应商数据库中的宽表有很长的前缀,我会说,对列进行分组。垂直列出它们有助于对齐它们,以便更容易区分它们......我想我目前是一个特例。
谢谢。
【问题讨论】:
-
不,这根本不是问题。但这是一个问题,除了少数例外,存储过程不应该是大型进程。诸如发布批次或索赔支付之类的事情可能需要这样做,但大多数事情应该是快速和小型的数据操作。
-
你到底在说什么? 似乎您在问语法
CREATE PROC YouSP AS BEGIN {Part 1} END BEGIN {Part 2} END BEGIN {Part 3} ... END好吗?如果是这样,答案是否定的。 -
@Larnu 我认为你在评论中所说的问题的答案实际上是“是”
-
天啊!谢谢@iamdave。这绝对是那些星期之一......
-
SSMS 支持Code Outlining,这是一种隐藏当前不感兴趣的代码的便捷方式。我不喜欢“每列带前导逗号的行”格式。我尝试对相关列进行分组,例如一个连接表中的名字和姓氏或列,放在一行上。当语句在另一行继续时,我会以悬空的东西结束该行,例如
,或inner join,因此即使该行恰好位于窗口底部,也很明显缺少某些内容。
标签: sql-server tsql stored-procedures stored-functions