Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 强制SQL Server列为特定值_Sql Server 2005 - Fatal编程技术网

Sql server 2005 强制SQL Server列为特定值

Sql server 2005 强制SQL Server列为特定值,sql-server-2005,Sql Server 2005,无论insert或update语句中使用的值是多少,是否可以强制SQL Server 2005表中的列为特定值?基本上,我无法访问的应用程序中存在一个错误,它试图将日期1/1/0001插入datetime列。这将生成SqlDateTime溢出异常。由于此列甚至不用于任何内容,我希望以某种方式更新列上的约束或数据库中的某些内容,以避免出现错误。这显然只是一个临时的紧急补丁,以避免问题。。。欢迎想法…如何插入值?如果是通过存储过程。。。您可以修改存储过程以忽略该输入参数 如果是通过客户端生成的SQL

无论insert或update语句中使用的值是多少,是否可以强制SQL Server 2005表中的列为特定值?基本上,我无法访问的应用程序中存在一个错误,它试图将日期1/1/0001插入datetime列。这将生成SqlDateTime溢出异常。由于此列甚至不用于任何内容,我希望以某种方式更新列上的约束或数据库中的某些内容,以避免出现错误。这显然只是一个临时的紧急补丁,以避免问题。。。欢迎想法…

如何插入值?如果是通过存储过程。。。您可以修改存储过程以忽略该输入参数


如果是通过客户端生成的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