可能重複:
TSQL How do you output PRINT in a user defined function?SQL功能 - 記錄
這是推動我瘋了。
我有我試圖調試功能,但我不能插入表中,執行打印語句,甚至是從它產生一個錯誤。
SQL返回消息
無效使用的函數中的副作用的操作「打印」的。
我該如何調試這個,我只想知道變量在運行時的值?
可能重複:
TSQL How do you output PRINT in a user defined function?SQL功能 - 記錄
這是推動我瘋了。
我有我試圖調試功能,但我不能插入表中,執行打印語句,甚至是從它產生一個錯誤。
SQL返回消息
無效使用的函數中的副作用的操作「打印」的。
我該如何調試這個,我只想知道變量在運行時的值?
嘗試:
DECLARE @ExecuteString varchar(500)
,@Yourtext varchar(500)
@ExecuteString = 'echo '[email protected]+' > yourfile.txt)
exec master..xp_cmdshell @ExecuteString, no_output
使用 「>」 創建/覆蓋文件和 「>>」 創建/追加到文件中。您可能需要使用REPLACE(@Yourtext,'&','^&')
逃脫&
焦炭
儘管我們在這裏禁用了'xp_cmdshell',這通常是一個很好的解決方案! – CaffGeek
@Chad,因爲你有一個表值函數,我只是建立一個調試文本字符串,並將其作爲列中的字段返回,您可以在調用代碼中進行轉儲/顯示。 –
如果你的函數返回一個字符串,你總是可以插回例如
ALTER FUNCTION dbo.whatever()
RETURNS NVARCHAR(128)
AS
BEGIN
DECLARE @foo VARCHAR(128);
SELECT TOP (1) @foo = name FROM sys.objects ORDER BY NEWID();
-- temporary debug:
RETURN (@foo);
... continue with function
END
GO
如果變量是數字或日期,你可以使用RTRIM()或()轉換到安全首先轉換爲字符串。
你可以做一個表值函數類似的東西,只是添加一列,你可以把你想輸出任何調試消息或變量。
究竟是什麼是你的函數做什麼?也許你應該使用存儲過程。正如錯誤消息所述,你不能做你想做的事...... –
(令人驚訝的是)''xp_cmdshell''可以從函數調用,所以[可能幫助](http://sqlblog.com/blogs/ denis_gobo/archive/2008/05/08/6703.aspx)作爲臨時調試措施。 –
嘗試做一個選擇而不是打印。 – rvphx