当前位置:  开发笔记 > 编程语言 > 正文

TSQL如何在用户定义的函数中输出PRINT?

如何解决《TSQL如何在用户定义的函数中输出PRINT?》经验,为你挑选了5个好方法。

基本上我想PRINT在用户定义的函数中使用语句来帮助我的调试.

但是我收到以下错误;

在函数的"PRINT"中无效使用副作用或时间相关的运算符.

这可不可以吗?

无论如何,以帮助我的用户定义函数调试?



1> Estevez..:

提示:生成错误.

declare @Day int, @Config_Node varchar(50)

    set @Config_Node = 'value to trace'

    set @Day = @Config_Node

你会收到这条消息:

将varchar值'value to trace'转换为数据类型int时转换失败.



2> Tor Haugen..:

不,对不起 SQL Server中的用户定义函数非常有限,因为要求它们是确定性的.据我所知,没办法绕过它.

您是否尝试使用Visual Studio调试SQL代码?



3> TheTXI..:

我过去倾向于分两个阶段来完成我的职能.第一个阶段是将它们视为相当普通的SQL查询,并确保我从中获得正确的结果.在我确信它正在按预期执行之后,我会将其转换为UDF.



4> 小智..:

我通过暂时将我的函数重写为以下内容来解决这个问题:

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)



5> 小智..:

使用扩展过程xp_cmdshell运行shell命令.我用它来打印输出到文件:

exec xp_cmdshell 'echo "mytextoutput" >> c:\debuginfo.txt'

如果文件不存在,则创建文件debuginfo.txt.然后它将文本"mytextoutput"(不带引号)添加到文件中.对函数的任何调用都会写一个额外的行.

您可能需要首先启用此db-server属性(默认=禁用),但我认为这可能不符合dba对生产环境的喜好.


不要忘记事先运行:EXEC sp_configure'xp_cmdshell',1 GO RECONFIGURE GO
推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有