可能重复:
How Can i display the output of SQL “PRINT” Command in C#?
我有SQL语句,通过PRINT命令输出它来生成另一个SQL语句。现在我必须在SQL编辑器中手动运行它,复制生成的字符串查询并在不同的窗口中运行该查询。
我想使用.NET控制台应用程序自动执行此操作。是否可以在.NET中捕获PRINT语句输出?还有另一种捕获SQL PRINT输出的方法吗?
答案 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
绕过整个往返。 EXEC和sp_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