当前位置: 首页 > 面试题库 >

帮助SQL Server触发器以在插入之前截断错误数据

司允晨
2023-03-14
问题内容

我们使用了决定将字段的最大长度从255更改为一个Web服务。我们的终端上有一个旧的供应商表,该表仍然限制为255。我们希望使用触发器来暂时解决此问题,直到我们能够实现在我们的下一个迭代中提供了一个更加商业友好的解决方案。

这是我开始的:

CREATE TRIGGER [mySchema].[TruncDescription] 
ON  [mySchema].[myTable] 
INSTEAD OF INSERT
AS 
BEGIN
SET NOCOUNT ON;

INSERT INTO [mySchema].[myTable]
SELECT SubType, type, substring(description, 1, 255)
FROM inserted
END

但是,当我尝试在上插入时myTable,出现错误:

字符串或二进制数据将被截断。该语句已终止。

我尝试进行实验,SET ANSI_WARNINGS OFF该查询允许查询工作,但随后根本没有在描述列中插入任何数据。

有什么方法可以使用触发器来截断太长的数据,或者还有另一种方法可供我使用,直到可以设计出更加雄辩的解决方案为止?由于表是供应商表,因此我们在表修改方面受到了相当有限的限制(即不能这样做),并且我们无法控制正在使用的Web服务,因此我们也无法要求他们对其进行修复。任何帮助,将不胜感激。


问题答案:

无法避免该错误,因为在填充插入表时发生了错误。

从文档中:http :
//msdn.microsoft.com/zh-
cn/library/ms191300.aspx

“插入和删除表的格式与定义INSTEAD OF触发器的表的格式相同。插入和删除表中的每一列都直接映射到基础表中的列。”

我能想到的唯一真正的“聪明”想法是利用登录名使用的模式和默认模式。如果可以获得Web服务用来引用另一个表的登录名,则可以增加该表上的列大小,并使用INSTEAD
OF INSERT触发器对供应商表执行INSERT。一种变化是在另一个数据库中创建表,并为Web服务登录设置默认数据库。

CREATE TRIGGER [myDB].[mySchema].[TruncDescription] 
ON  [myDB].[mySchema].[myTable] 
INSTEAD OF INSERT
AS 
BEGIN
SET NOCOUNT ON;

INSERT INTO [VendorDB].[VendorSchema].[VendorTable]
SELECT SubType, type, substring(description, 1, 255)
FROM inserted
END


 类似资料:
  • 是否可以更改此触发器,以便表获得插入的2个列值(,)? 如何找到的值? 如果它是已知的并且可以插入表,那么它是否也可以插入表? 创建表排序顺序: 创建表图像: 错误消息: 错误1054:“new”SQL语句中的列“sortOrder”未知: 在INSERT ON image之前为每一行开始INSERT to nextcart.sortOrder设置sortOrderId=NULL,sortOrde

  • 也许有人能帮我澄清一下。 我正在尝试编写一个插入前触发器,如果它留空,可以设置关闭。这可能吗? 没有太多代码可显示。我所做的只是创建了一个带有调试语句的简单的插入前触发器,以确保我的触发器在验证规则之前执行。似乎验证规则是第一位的(我显然无法更改它)。触发器永远不会触发。 这是可行的还是不可能的?

  • 问题内容: 在MSSQL中执行TRUNCATE(而不是删除)时,如何触发触发器 问题答案: 来自msdn: TRUNCATE TABLE无法激活触发器,因为该操作不会记录单个行的删除。

  • 在“name=new.user_name”后面发现意外的标记“end-of-statement”。预期的令牌可能包括:“”..sqlcode=-104,sqlstate=42601,driver=4.9.78 SQL code:-104,SQL state:42601

  • 我编写了一个函数,用于在给定范围之前或之后截断数据。我传入一个日期元组,位置1是开始日期,位置2是结束日期。 我如何也可以选择指定截断b4和b4之后的时间和日期-我将如何使用我的代码来做到这一点?*) 此外-我一直在我的数据上得到一个错误,说: 我使用: 我的日期元组: 这是数据集的my df.head(): 我已经运行了下面的程序来检查索引中的dupilcates,它返回NAT,所以我不确定为什

  • 我使用赛贝斯ASE 15.7。我希望在插入之前创建触发器,以便在插入之前,我想修改插入行中的一些字段。 请帮忙谢谢!