基本上我想PRINT
在用户定义的函数中使用语句来帮助我的调试.
但是我收到以下错误;
在函数的"PRINT"中无效使用副作用或时间相关的运算符.
这可不可以吗?
无论如何,以帮助我的用户定义函数调试?
提示:生成错误.
declare @Day int, @Config_Node varchar(50) set @Config_Node = 'value to trace' set @Day = @Config_Node
你会收到这条消息:
将varchar值'value to trace'转换为数据类型int时转换失败.
不,对不起 SQL Server中的用户定义函数非常有限,因为要求它们是确定性的.据我所知,没办法绕过它.
您是否尝试使用Visual Studio调试SQL代码?
我过去倾向于分两个阶段来完成我的职能.第一个阶段是将它们视为相当普通的SQL查询,并确保我从中获得正确的结果.在我确信它正在按预期执行之后,我会将其转换为UDF.
我通过暂时将我的函数重写为以下内容来解决这个问题:
IF OBJECT_ID ('[dbo].[fx_dosomething]', 'TF') IS NOT NULL drop function [dbo].[fx_dosomething]; GO create FUNCTION dbo.fx_dosomething ( @x numeric ) returns @t table (debug varchar(100), x2 numeric) as begin declare @debug varchar(100) set @debug = 'printme'; declare @x2 numeric set @x2 = 0.123456; insert into @t values (@debug, @x2) return end go select * from fx_dosomething(0.1)
使用扩展过程xp_cmdshell运行shell命令.我用它来打印输出到文件:
exec xp_cmdshell 'echo "mytextoutput" >> c:\debuginfo.txt'
如果文件不存在,则创建文件debuginfo.txt.然后它将文本"mytextoutput"(不带引号)添加到文件中.对函数的任何调用都会写一个额外的行.
您可能需要首先启用此db-server属性(默认=禁用),但我认为这可能不符合dba对生产环境的喜好.