c00*_*0ke 65 t-sql user-defined-functions
基本上我想PRINT在用户定义的函数中使用语句来帮助我的调试.
但是我收到以下错误;
在函数的"PRINT"中无效使用副作用或时间相关的运算符.
这可不可以吗?
无论如何,以帮助我的用户定义函数调试?
Est*_*vez 42
提示:生成错误.
declare @Day int, @Config_Node varchar(50)
set @Config_Node = 'value to trace'
set @Day = @Config_Node
Run Code Online (Sandbox Code Playgroud)
你会收到这条消息:
将varchar值'value to trace'转换为数据类型int时转换失败.
小智 21
我通过暂时将我的函数重写为以下内容来解决这个问题:
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)
Run Code Online (Sandbox Code Playgroud)
小智 7
使用扩展过程xp_cmdshell运行shell命令.我用它来打印输出到文件:
exec xp_cmdshell 'echo "mytextoutput" >> c:\debuginfo.txt'
Run Code Online (Sandbox Code Playgroud)
如果文件不存在,则创建文件debuginfo.txt.然后它将文本"mytextoutput"(不带引号)添加到文件中.对函数的任何调用都会写一个额外的行.
您可能需要首先启用此db-server属性(默认=禁用),但我认为这可能不符合dba对生产环境的喜好.