捕获MS SQL输出

时间:2012-06-08 16:57:51

标签: .net sql sql-server-2008

  

可能重复:
  How Can i display the output of SQL “PRINT” Command in C#?

我有SQL语句,通过PRINT命令输出它来生成另一个SQL语句。现在我必须在SQL编辑器中手动运行它,复制生成的字符串查询并在不同的窗口中运行该查询。

我想使用.NET控制台应用程序自动执行此操作。是否可以在.NET中捕获PRINT语句输出?还有另一种捕获SQL PRINT输出的方法吗?

3 个答案:

答案 0 :(得分:2)

当我来到这里寻找直接问题的答案时,即“如何捕获打印命令的输出”,我想扩展先前的答案。

如果要使用多个print语句构建sql命令,则可以 在set命令中连接片段

SET @sqlCommand = @sqlCommand + @newPart;

这很不幸,但有时我会遇到问题,因为sqlserver认为我已经超过了@sqlCommand的最大大小。我通过分别保存这些部分来解决这个问题,我经常需要相同部分的变量,然后在exec命令中将它们连接起来,如下所示:

EXEC ( 
 'MERGE ' + @targetTable + ' t ' +
 'USING ' + @sourceTable + ' s ' +
 'ON ' + @keycondition + ' ' +
 'WHEN MATCHED AND ' + @updateCondition + ' THEN ' +
   'UPDATE SET ' + @updateColumns + ' ' +
 'WHEN NOT MATCHED BY TARGET THEN ' +
   'INSERT (' + @insertTargetColumns + ') ' +
   'VALUES (' + @insertSourceColumns + ') ' +
 'WHEN NOT MATCHED BY SOURCE THEN '
   'UPDATE SET deleteFlag = ''D'', updDtTm = GETDATE()'
)

希望这会有所帮助。我正在从快照转向增量更新,因此sourceTable中包含了deleteFlag,我没有使用最后一个子句。

答案 1 :(得分:1)

而不是

Print @sql

做一个

Select @sql

按照您的需要捕获它(ADO,Linq2Sql,EF),然后正常运行该语句。通过在记录集中返回sql,您可以依赖于任何框架处理数据的正常方式,而不是尝试做一些不是为了实际返回数据而设计的东西(您的sql实际上是返回的数据)。

如果您愿意,甚至可以跳过该步骤

EXEC sp_executesql @sql

绕过整个往返。 EXECsp_ExecuteSql文档。

答案 2 :(得分:0)

如果您使用的是sql server / oracle,则可以非常轻松地执行动态SQL

对于sql server,您可以使用EXEC或sp_executesql

DECLARE @sqlCommand varchar(1000)
SET @sqlCommand = 'SELECT * FROM SOME_TABLE'
--Use Exec
EXEC (@sqlCommand)
--or you can use the sp_executesql
EXECUTE sp_executesql @sqlCommand

如果您使用的是oracle,则需要使用EXECUTE IMMEDIATE