Sql server 2005 强制SQL Server列为特定值
无论insert或update语句中使用的值是多少,是否可以强制SQL Server 2005表中的列为特定值?基本上,我无法访问的应用程序中存在一个错误,它试图将日期1/1/0001插入datetime列。这将生成SqlDateTime溢出异常。由于此列甚至不用于任何内容,我希望以某种方式更新列上的约束或数据库中的某些内容,以避免出现错误。这显然只是一个临时的紧急补丁,以避免问题。。。欢迎想法…如何插入值?如果是通过存储过程。。。您可以修改存储过程以忽略该输入参数Sql server 2005 强制SQL Server列为特定值,sql-server-2005,Sql Server 2005,无论insert或update语句中使用的值是多少,是否可以强制SQL Server 2005表中的列为特定值?基本上,我无法访问的应用程序中存在一个错误,它试图将日期1/1/0001插入datetime列。这将生成SqlDateTime溢出异常。由于此列甚至不用于任何内容,我希望以某种方式更新列上的约束或数据库中的某些内容,以避免出现错误。这显然只是一个临时的紧急补丁,以避免问题。。。欢迎想法…如何插入值?如果是通过存储过程。。。您可以修改存储过程以忽略该输入参数 如果是通过客户端生成的SQL
如果是通过客户端生成的SQL,或者ORM工具otoh,那么afaik,唯一的选项是一个“Before”触发器,它用一个可接受的值“替换”该值 最简单的方法是将其设置为varchar,并将其作为字符串插入到列中
更复杂的答案是,您可以使用触发器对数据进行按摩,但首先它必须是有效的。例如,我可以重置更新/插入触发器中的字段值,但它仍然必须先通过插入操作。我会创建一个来检查和更改该值。如果使用SQL 2005,则可以创建一个代替触发器。 此触发器中的代码将代替原始插入/更新运行
-eNode如果它是第三方应用程序,那么我将假设您没有访问存储过程的权限,或者没有用于生成和插入该值的逻辑(但是仍然值得检查应用程序数据库的SPs,看看是否可以修改它们) 正如Charles所建议的,如果您没有访问源代码的权限,那么您需要在insert上有一个触发器 Microsoft文章将为您提供一些关于创建触发器的深入信息 但是,据我所知,SQL Server没有真正的“插入前”触发器,因此您需要尝试而不是。查看更多信息。在该条中,请特别注意第37.7节和以下示例(同样来自该条):
尼克。同意。看一看,而不是触发器。感谢您提供的具体示例,这正是我需要的。
CREATE TRIGGER T_InsertInventory ON CurrentInventory
INSTEAD OF INSERT AS
BEGIN
INSERT INTO Inventory (PartNumber, Description, QtyOnOrder, QtyInStock)
SELECT PartNumber, Description, QtyOnOrder, QtyInStock
FROM inserted
END