如何为特定的新主键记录插入默认值记录?

时间:2012-03-27 16:32:52

标签: sql sql-server sql-server-2008 sql-server-2008-r2

我有一个名为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;

还有其他建议吗?

4 个答案:

答案 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

这假设您使用主键的自动增量标识。