我在SQL Server数据库中具有自动递增主键[ID]
的表。有什么方法可以在[ID]
语句中包含INSERT
列,以便数据库将其忽略?表配置有一些技巧吗?
我不在Omron NJ PLC上的PC上工作,所以我自己不能写语句。而是从Structs映射它们。并且,如果可能的话,我想对INSERT
和SELECT
使用相同的结构(在以后的[ID]
中我需要UPDATE
)。我也不想自己生成索引。虽然邪恶程度较小。
答案 0 :(得分:1)
在SQL Server中,您需要为插入的列提供一个值。有一个名为DEFAULT
的特殊值,它将插入默认值。但是,它不能与IDENTITY
列一起使用。
通常的insert
方法是简单地忽略该列:
insert into t (<all columns but id>)
values (<all values for other columns>);
即使表上的触发器也无法解决此限制,但是您可以使用以下技巧:
instead of insert
触发器。这看起来像:
create view v_t as
select * from t;
create trigger trig_v on v_t instead of insert as
begin
insert into t ( . . . ) -- all columns except id
select . . . -- all columns except id
from inserted;
end;
insert into v_t -- I recommend listing the columns but not required
values (NULL, . . . );
Here是db <>小提琴。
答案 1 :(得分:1)
如果要在标识上插入ID的显式值,可以在插入之前使用SET INSERT_IDENTITY ON语句。之后,您将通过语句SET INSERT_IDENTITY OFF再次启用身份。
希望这会有所帮助。