我有一个名为myTable的表,其中包含多个列,其中一些列有一个默认值,对于其余列,NULL是可能的和可接受的值。
有一个名为pkVariable的主键,其余列名为column2,column3,column4和column5。 column2和column3配置为分别获取默认值0和1,并配置为NOT NULL。 column4和column5没有默认值,但它们被设置为可能有NULL值。
我的问题是,如何在myTable中插入新的“空”记录。我的意思是,我想在myTable的新记录中包含主键值,即column2&的默认值。 column3和column5和column5的NULL值。
如果pkVariable有默认值或者是IDENTITY,我可以这样做:
INSERT INTO myTable DEFAULT VALUES;
买我不能,'因为pkVariable必须在INSERT子句中获得pkValue。
我可以使用:
INSERT INTO myTable VALUES (pkValue, DEFAULT, DEFAULT, DEFAULT, DEFAULT);
并且它有效,但我不想依赖于列数。
因此,实现目标的正确语法是什么?
我错误地认为我可以这样做:
INSERT INTO [myTable] ([pkVariable]) VALUES (pkValue) DEFUALT VALUES;
并想到了这个方向:
WITH pkVariable = pkValue
INSERT INTO [myTable] DEFAULT VALUES;
还有其他建议吗?
答案 0 :(得分:6)
只是不要在插入中包含您想要默认的列。如果未包含列,它将使用默认值。
MYTABLE
-PKColumn IDENTITY(1,1)
-Column1 VARCHAR DEFAULT 'ColumnValue'
-Column2 INT
然后,您需要做的就是:
INSERT INTO MYTABLE (Column2) VALUES (123);
该行将作为
插入1|'ColumnValue'|123
注意默认值是如何插入的
答案 1 :(得分:0)
如果您的所有列都允许空值或具有默认值,并且您不想在insert上指定任何值,请尝试以下操作:
drop table #test
create table #test (id int identity, test varchar(10) default 'test' not null,
test2 varchar (10) null, test3 int default 1 not null)
insert into #test (test)
values (default)
select * from #test
答案 2 :(得分:0)
使用以下命令
为PK ID列使用序列 nextval('[name of your sequence]'::regclass)
然后您可以使用INSERT AS SELECT [whatever]
答案 3 :(得分:-1)
如果您想要输入包含特定主键的记录,请使用此功能。
set identity_insert mytable on
insert into mytable (pkvariable) values (1)
set identity_insert mytable off
这假设您使用主键的自动增量标识。