可能重复:
How Can i display the output of SQL “PRINT” Command in C#?捕获MS SQL输出
我有通过经由PRINT命令输出它产生另一个SQL语句的SQL语句。现在我必须在SQL编辑器中手动运行它,复制结果字符串查询并在不同的窗口中运行该查询。
我想使用.NET控制台应用程序实现自动化。是否有可能在.NET中捕获PRINT语句输出?是否有另一种方法来捕获SQL PRINT输出?
可能重复:
How Can i display the output of SQL “PRINT” Command in C#?捕获MS SQL输出
我有通过经由PRINT命令输出它产生另一个SQL语句的SQL语句。现在我必须在SQL编辑器中手动运行它,复制结果字符串查询并在不同的窗口中运行该查询。
我想使用.NET控制台应用程序实现自动化。是否有可能在.NET中捕获PRINT语句输出?是否有另一种方法来捕获SQL PRINT输出?
而不是
Print @sql
做一个
Select @sql
捕捉它,你想怎么(ADO,LINQ2SQL,EF),然后正常运行的说法。通过以记录集的形式返回sql,您可以依靠任何框架处理数据的正常方式,而不是尝试执行某些不是旨在实际返回数据的事情(您的sql实际上是返回数据)。
你甚至可以跳过这一步,如果你想和做
EXEC sp_executesql @sql
绕过整个往返。 EXEC和sp_ExecuteSql文件。
如果您正在使用SQL Server/oracle您可以执行动态SQL很容易
对于SQL Server,你可以使用EXEC或如果您使用的是Oracle对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
,那么你就需要使用EXECUTE IMMEDIATE
当我来到这里寻找你的直接问题的答案,那就是“如何捕获打印命令的输出”,我想扩展先前的答案。
如果您正在使用多个打印语句可以 串联一组命令
SET @sqlCommand = @sqlCommand + @newPart;
这是不幸的,但有时我遇到的问题,因为SQLSERVER认为我已经超出了最大规模的作品建立一个SQL命令对于@sqlCommand,当我没有。我解决这个问题通过分别持有件,我经常需要在同一块varations无论如何,然后将它们连接在这样的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,我不使用最后一个子句。
如果我必须使用Print语句会怎么样?我不只是从表中选择,而且还会输出创建另一个SQL查询的字符串。 –
如果你需要,那么我感到很抱歉,你在那个位置。我没有经验(也不希望)从打印语句中提取数据。 –
确实很伤心 –