Sql server SQL Server udf函数返回特定结果时创建错误记录

Sql server SQL Server udf函数返回特定结果时创建错误记录,sql-server,tsql,stored-procedures,user-defined-functions,Sql Server,Tsql,Stored Procedures,User Defined Functions,整个周末我都在绞尽脑汁 我有一个SQL Server UDF来检查作为参数传递的值是否会截断 CREATE FUNCTION willTruncate (@fldValue nvarchar(200), @fldSize smallint, @fieldname nvarchar(40), @tbl varchar(15)) RETURNS varchar(200) AS BEGIN declare @Return va

整个周末我都在绞尽脑汁

我有一个SQL Server UDF来检查作为参数传递的值是否会截断

CREATE FUNCTION willTruncate 
      (@fldValue nvarchar(200), 
       @fldSize smallint, 
       @fieldname nvarchar(40), 
       @tbl varchar(15))
RETURNS varchar(200) 
AS 
BEGIN 
    declare @Return varchar(200) 

    declare @fldLen smallint
    SET @fldLen = len(@fldValue)

    if @fldLen <= @fldSize
        SET @Return = @fldValue 
    else 
        SET @Return = left(@fldValue,@fldSize-3) + '...'

    RETURN @Return
END
我的问题是,我需要以某种方式报告有关截断的情况,以便最终用户可以更正记录

我有一个要填充的表,并尝试插入一条记录作为else子句的一部分、一个单独的函数和一个存储过程。每次我运行代码都会失败

insert into tblTruncationErrors(trunkTable, trunkField, trunkValue) 
values(@tbl, @fieldname, @fldValue)

将其作为原始函数代码的一部分运行会失败,说明它需要在函数或存储过程中完成。如果我把它作为一个函数来做,它会说我必须使用一个存储过程。将其用作存储过程会产生一条消息,表明它只能从函数运行


那么,我写错了吗?有没有办法做到这一点。我并不坚持要把它放到一个表中,这样Excel或csv文件输出也会很好

函数不能有副作用,例如改变数据库状态,因此不能在函数中插入、更新或删除数据。更多细节,请善待你的大脑。破坏它不是一个好主意。
insert into tblTruncationErrors(trunkTable, trunkField, trunkValue) 
values(@tbl, @fieldname, @fldValue)
CREATE FUNCTION dbo.logTruncation 
    (@fldValue nvarchar(200), @fieldname nvarchar(40), @tbl varchar(15))
RETURNS varchar(30) 
AS 
BEGIN 
    declare @Return int

    insert into dbo.truncationErrors(trunkTable, trunkField, trunkValue)
    Values (@tbl, @fieldname, @fldValue)

    SET @Return = @fieldname

    RETURN @Return
END
CREATE PROC sp_logTruncation
    @tbl varchar(20),
    @fldName varchar(30),
    @fldValue varchar(200)
AS
    SET NOCOUNT ON

    insert into dbo.truncationErrors(trunkTable, trunkField, trunkValue)
    Values (@tbl, @fldName, @fldValue)

    SET NOCOUNT OFF
    RETURN 1
GO