2013-03-27 168 views
0

我必须在SQL Server 2008(也在2005年)中调试大型存储过程。使用输出文件调试Sql Server存储过程

因为我不能进入该程序StepByStep,我需要使用一些输出文件进行调试。

其实我使用类似

DECLARE @SQL VARCHAR(8000) 
SELECT @SQL = 'BCP "SELECT * FROM MY_TABLE" QUERYOUT "D:\TDB\test.txt" -C -T -w' 
EXEC MASTER..XP_CMDSHELL @SQL 

但这种方法有一个像不可能使用#表,并使用过滤器(一种复杂的方式多限制,其中X ='+ CAST(@MYLocalVar为varchar)+ “)......

有没有其他的方式来输出选择到一个文件中,像MySql的

SELECT * into outfile '../../htdocs/VIP/Temp/temp.txt' from tmp_Menu2; 
+0

为什么不把结果输出到一个表中,可能在另一个数据库中,并调查? – 2013-03-27 14:43:03

+0

但我需要创建一个表,每次列应该对应于具体情况,通过ex连接或选择性选择...有点令人尴尬,如果我使用其他数据库,我需要在其他数据库中构建表。 .. – serhio 2013-03-27 14:48:41

回答

0

你可以把数据插入到表很容易:

SELECT * 
into  anotherdatabase..outtable 
from . . . 

这将创建任何你想要的列的新表。

要将某些内容输出到文件中需要额外的步骤,使用bulk export

+0

首先,我需要为我的每个选择手动创建一个表。 其次,我需要为每个循环创建分隔的多个输出(在一段时间内,由ex)。我可以把它输出到不同的输出文件“myFile”+ @ currrentId +“.txt” – serhio 2013-03-27 14:58:31

+0

批量导出不在同一个会话中,所以我不能使用#tables来传输。 – serhio 2013-03-27 15:20:21

+0

要使用临时表,您需要使用全局临时表。 。 。 ##表。您也可以使用xml结合结果,但是这需要对查询进行更多的更改,而不仅仅是添加'into'子句。 – 2013-03-27 15:21:24