可能重复:
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