0

可能重复:
如何在 C# 中显示 SQL“PRINT”命令的输出?

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

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

4

3 回答 3

2

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

如果您正在使用多个打印语句构建 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 并且我不使用最后一个子句。

于 2012-09-29T20:29:15.603 回答
1

代替

Print @sql

做一个

Select @sql

以您想要的方式捕获它(ADO、Linq2Sql、EF),然后正常运行该语句。通过在记录集中返回 sql,您可以依赖任何框架处理数据的正常方式,而不是尝试执行并非旨在实际返回数据的操作(您的 sql 实际上是正在返回的数据)。

如果你愿意,你甚至可以跳过这一步

EXEC sp_executesql @sql

绕过整个往返行程。 EXECsp_ExecuteSql文档。

于 2012-06-08T17:00:29.400 回答
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

于 2012-06-08T17:01:51.040 回答