来自 Oracle,我发现 SSMS 连接与 Oracle 的 SQL Developer 略有不同。Oracle 您单击一个连接,然后您打开的所有选项卡都使用该连接。SSMS 为我打开的每个窗口/选项卡创建一个全新的连接/实例。 我不想要这个。我试图解决的这种行为让我想到了两个讨厌的问题。
- 在另一个窗口中查看 COMMIT 之前脚本的影响
我希望能够在一个窗口中运行脚本......并且在另一个窗口中能够查询未提交的数据以简单地查看结果......目前我必须使用运行脚本的相同窗口为了简单地查看影响。(我想到了提交/回滚按钮 - Oracle 我有时会想念你)。
- 从另一个窗口查看存储在#TempTable 中的数据
我正在使用脚本创建#TempTable ...但想从另一个窗口查询它的数据。目前,当我打开另一个窗口(与 Oracle 的 SQL Developer 不同)时,它会使用新的连接/实例打开窗口。如何从另一个窗口而不是我运行脚本的窗口查询#TempTable 中的数据?
以上只是出于组织原因......运行脚本非常痛苦......然后当我不想编辑/添加任何其他代码时,必须从同一个选项卡中写入其他代码包含我运行的脚本的页面。
如果我做错了什么或遗漏了一些要点,请告诉我。
你没有错过任何东西。SSMS 每个选项卡始终有一个单独的会话。
在 SSMS 中,执行命令 (F5,Ctrl-e) 始终在查询窗口中运行突出显示的文本(如果有)。
因此,人们在这里使用 SSMS 查询窗口的正常方式是突出显示要运行的代码部分,通常使用多行注释将主脚本与测试/调试位分开。
例如,在开发存储过程时,查询窗口可能如下所示:
然后运行整个脚本以重新创建 proc,并突出显示测试工具行并运行以对其进行测试。
您可以使用诸如 WITH (NOLOCK) 或 WITH (READUNCOMMITTED) 之类的表提示在 SSMS 中的两个窗口之间执行未提交数据的脏读。
您可以使用全局临时表(##Table 而不是#Table)跨会话查询临时表。请注意,您必须首先将临时表创建为全局临时表。
一种简单的方法是编写整个脚本,包括检查/测试数据更改的查询,并实际突出显示您要运行和执行它们的各个部分。
采取下面的代码示例。我想在表中插入两条记录,验证结果,如果我满意则提交,否则回滚:
我会将整个代码放在一个窗口中,突出显示第 1-5 行并点击 Execute/F5。数据已插入但未提交,因此我突出显示第 7 行并点击 Execute/F5 并验证结果。如果我很高兴,我突出显示第 9 行并点击 Execute/F5 以提交更改,或者如果我想回滚,我突出显示第 11 行并点击 Execute/F5。
另外,请注意,如果IMPLICIT_TRANSACTIONS为 OFF(默认),那么您的会话基本上使用“自动提交”,这意味着没有显式的 BEGIN TRANSACTION,INSERT 语句将自动提交。