SQL 2012中的调试插入和时态表

时间:2013-03-15 13:55:06

标签: sql sql-server tsql sql-server-2012 visual-studio-debugging

我正在使用SQL Server 2012,而我正在调试执行某些INSERT INTO #temporal table SELECT的商店过程。

有什么方法可以查看在命令中选择的数据(插入的子查询到?) 有没有办法查看插入的数据和/或插入对变化进行处理的时间表?

如果是总行数,则不是一个一个

更新

AT合规性和公司政策要求任何修改都可以在测试过程中进行,并且很可能由其他团队进行管理。有什么方法可以避免对脚本进行任何更改吗?

主要思想是AT用户检查他们的workdesktop输出,复制并粘贴它们,而不对环境或产品做任何改变。

谢谢和亲切的问候。

3 个答案:

答案 0 :(得分:2)

你有什么理由不能这样做:SELECT * FROM #temporal? (并在SQL Server Management Studio中调试它,传入应用程序传入的相同参数)。

这是一种快速而肮脏的方式,但是你可能想要以另一种方式(更干净/更好)的答案这样做的一个原因是你在这里得到了更多的控制权。而且,如果您处于临时表中有多个插入的情况(希望您不是这样),您只需执行一次选择即可立即查看所有插入的行。

我仍然可能会采用另一种方式(现在我知道了)。

答案 1 :(得分:2)

如果我理解你的问题,请查看OUTPUT条款:

  

从受影响的每一行返回信息或基于表达式的表达式   通过INSERT,UPDATE,DELETE或MERGE语句。这些结果可以   返回处理应用程序以用于此类事物   确认消息,存档和其他此类应用程序   要求。


例如:

INSERT INTO #temporaltable 
OUTPUT inserted.*
SELECT *
FROM ...

将为您提供插入INSERT表的temporal语句中的所有行,这些行是从另一个表中选择的。

答案 2 :(得分:1)

我知道如果不改变脚本就无法做到这一点。但是,对于未来,如果没有允许您输入所需数据测试的调试参数,则不应编写复杂的strored proc或脚本。使它成为默认值为0的最后一个参数,您甚至不必更改调用proc的当前代码。

然后,您可以在下面的任何地方添加语句,以便检查中间结果。此外,在调试模式下,您可能始终回滚任何事务,以便错误不会影响数据。

IF @debug = 1
BEGIN
   SELECT * FROM #temp
END