可能重複:
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查詢的字符串。 –
如果你需要,那麼我感到很抱歉,你在那個位置。我沒有經驗(也不希望)從打印語句中提取數據。 –
確實很傷心 –