Sql server SQL Server udf函数返回特定结果时创建错误记录
整个周末我都在绞尽脑汁 我有一个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
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