我似乎以错误的方式思考sql。我总是写一些不起作用的东西。
例如我需要一个变量。所以我认为:
DECLARE @CNT AS INT
SET @CNT = COUNT(DISTINCT database.schema.table.column)
为什么这不起作用...?我在这里使用的是完全限定的参考,所以我想要的值应该很清楚。
DECLARE @CNT AS INT
SET @CNT = (SELECT COUNT(DISTINCT database.schema.table.column) FROM column)
这有效......但为什么我必须使用选择?
是否所有内容都必须以 DDL 或 DML 语句之一开头?
其次:我无法逐行调试,因为一条sql语句被视为一步。我可以调试的唯一方法是,如果我选择最里面的子查询并运行它,然后包含下一个外部子查询并运行它,依此类推。
有本地窗口吗?
我听说过基于集合的思维而不是迭代思维,我想即使对于函数式语言我仍然是迭代的......迭代只是从最里面的括号到最外面的括号,并应用于整个集合。但即使在这里我也遇到了麻烦,因为我不知道集合中的哪个值会导致错误。
抱歉,如果这看起来很散漫……我想这只是反映了我对此的感受。我不知道如何从许多小组件构建一个大存储过程......就像在 vba 中一样,我可以调用另一个子例程并确保我需要的变量是全局的。
tldr:需要概念基础/知道当我键入内容并按 F5 时实际发生的情况