0

我正在使用 SQL Server 2012,并且正在调试一个存储过程,该过程执行一些INSERT INTO #temporal table SELECT.

有什么方法可以查看命令中选择的数据(插入的子查询?)有什么方法可以查看插入的数据和/或插入进行更改的临时表?

不管是总行数,不是一一

更新

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

主要思想是 AT 用户在他们的工作台上检查输出,复制并粘贴它们,而不对环境或产品进行任何更改。

谢谢和亲切的问候。

4

3 回答 3

2

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

这是一种快速而肮脏的方法,但是您可能希望以这种方式而不是另一个(更清洁/更好)的答案的一个原因是,您可以在这里获得更多控制权。而且,如果您在临时表中有多个插入的情况(希望您没有),您只需执行一次选择即可一次查看所有插入的行。

不过,我仍然可能会以另一种方式来做(现在我知道了)。

于 2013-03-15T13:58:14.143 回答
2

如果我正确理解了您的问题,请查看该OUTPUT子句:

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


例如:

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

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

于 2013-03-15T14:00:53.300 回答
1

我知道如果不更改脚本就无法做到这一点。但是,对于未来,您永远不应该在没有调试参数的情况下编写复杂的存储过程或脚本,这样您就可以进行所需的数据测试。将其设置为默认值为 0 的最后一个参数,您甚至不必更改当前调用 proc 的代码。

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

IF @debug = 1
BEGIN
   SELECT * FROM #temp
END
于 2013-03-15T14:22:56.083 回答