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

2024-04-09

我们使用了一个 Web 服务,该服务决定将字段的最大长度从 255 更改为 255。我们这边有一个旧的供应商表,其上限仍然为 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/en-us/library/ms191300.aspx http://msdn.microsoft.com/en-us/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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

帮助 SQL Server 触发器在插入之前截断坏数据 的相关文章

随机推荐

  • 如何以编程方式更改导航图的起始目的地?

    基本上 我有以下导航图 我想将导航图中的起点更改为fragment 2到达后立即 为了防止返回fragment 1当按下后退按钮时 就像启动画面一样 这是我的代码 navGraph navController getGraph navGra
  • swift 2.0 之后的 CGBitmapInfo alpha 掩码

    我正在使用这个 github 存储库中的库https github com Haneke HanekeSwift https github com Haneke HanekeSwift缓存从服务器下载的图像 更新到 swift 2 0 后
  • Android 上的 PhoneGap 需要所有这些权限吗?

    查看 hello world 的phonegap 文档 发现有很多权限 Android 清单中大约有 15 个 只是想知道是否所有这些都需要 See http phonegap com start android http phonegap
  • React 元素和粗箭头函数

    在 Redux 示例中 使用的语法是 const App gt div div
  • JAVA 图表库 - JFreeChart? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 首先 我确实阅读了所有其他类似的问题 并且查看了 JFreeChart 它似乎是为 Java 桌面应用程序生成图表的首选武器 它实际上也适
  • 如何在代码隐藏中向椭圆添加点击事件?

    要在后面的 C 代码中向按钮添加单击事件 我可以这样做 Button btn new Button btn Click btn Click 如果我有一个不包含 Click 的椭圆怎么办 Ellipse e new Ellipse e e C
  • 从 MySQL 表创建数组

    我正在尝试创建一个用于curl multi exec 的数组 但我似乎无法正确创建该数组 这是我的代码 SQL mysql query SELECT url FROM urls or die mysql error Query the sh
  • 如何重用javascript中的代码块

    我是学习 javascript 的新手 如果这个问题太基础 我深表歉意 我试图寻找解决方案 但我什么都不清楚 我已在此链接中创建了此代码 https jsfiddle net 5p7wzy9x 3 https jsfiddle net 5p
  • 在多个小部件上显示相同的 QPushButton

    我有两个小部件 真实的和假的 其中之一有一个 QPushButton 现在我希望在另一个小部件中显示相同的按钮 我该怎么做 我不想创建副本 我希望在不更改父级的情况下同时向另一个小部件显示相同的 QObject 作为示例 在下面我希望 my
  • 双队列代码需要减少

    有什么方法可以减少此代码以执行相同的操作 但少 100 个字符 这是一个简单的双边队列 具有pushHead popHead pushTail popTail 以及访问长度和isEmpty的方法 var makeDeque function
  • http post - 如何发送授权标头?

    如何在 Angular2 RC6 中向 http 请求添加标头 我得到以下代码 login login String password String Observable
  • 从 BigQuery 读取数据并将数据存储到 Google 存储(特殊字符问题)

    参考 Google 数据流可以使用现有的虚拟机而不是临时创建的虚拟机吗 https stackoverflow com questions 56167044 can google data flow use existent vm and
  • 如何将元素推入作为哈希值保存的数组引用中?

    data digits gt 1 2 3 letters gt a b c 我怎么能够push 4 into data digits 我是 Perl 新手 那些 符号对我来说看起来很奇怪 我有 PHP 背景 push data digits
  • 在堆积条上显示总计 Plotly

    如何在 Plotly 中的堆积条形图上显示总计 我可以将鼠标悬停并查看每个组的单独值 但看不到总数 您可以在中设置总和text属性并显示在hoverinfo import plotly plotly offline init noteboo
  • 使用 List 作为 State 时,Jetpack Compose 中的 item`属性发生变化时如何更新 UI?

    例如 我将数据加载到列表中 它由 MutableStateFlow 包装 然后将它们收集为 UI 组件中的状态 问题是 当我更改 MutableStateFlow 中的某个项目 例如修改属性 但不添加或删除时 UI 不会更改 那么 当我修改
  • pyspark/EMR 中大型 DataFrame 上的collect() 或 toPandas()

    我有一个由一台机器 c3 8xlarge 组成的 EMR 集群 在阅读了一些资源后 我了解到我必须允许相当数量的堆外内存 因为我使用的是 pyspark 所以我配置了集群如下 执行人一名 火花 执行器 内存 6g Spark executo
  • glob.glob 排序 - 不符合预期

    我使用 glob glob 从目录中读取一些文件 这些文件的命名如下 1 bmp 文件 名称继续采用以下命名模式 1 bmp 2 bmp 3 bmp 等等 这是我目前拥有的代码 但是虽然从技术上讲这确实排序 但它并不符合预期 files s
  • emacs shell 命令输出不显示 ANSI 颜色,但显示代码

    当我做M 在我的 emacs 21 4 中 ANSI 代码是字面意思 例如 ls color 0m 0m05420273 pdf 0m 0m100829 Ba o1 pdf 0m 有没有办法同时使用颜色和UTF8 同样的问题已经被之前在SO
  • DB::table('table') 和 model::('table') 之间的区别

    在 Laravel 上我们可以使用以下方式访问DB table table gt get 或使用model table gt all 我的问题是它们之间有什么区别 thanks 你可以这样做 因为Model和DB外观都实现了产生一个的函数B
  • 帮助 SQL Server 触发器在插入之前截断坏数据

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