我们如何插入默认值,如下所示?
INSERT INTO table1 (name, number = rand())
VALUES ('name1'), ('name2'), ('name3'), ('name4')
答案 0 :(得分:1)
您可以更改/添加现有的default
约束,如果只是暂时的话,可能会在之后还原它:
ALTER TABLE table1 ADD CONSTRAINT def_number DEFAULT ABS(CHECKSUM(NewId())) FOR number;
现在您可以像这样插入
INSERT INTO table1 (name)
VALUES ('name1'), ('name2'), ('name3'), ('name4')
例如,这个
drop table table1;
create table table1 (name varchar(50), number int);
alter table table1 add constraint def_number default abs(checksum(newid())) for number;
insert into table1 (name) values ('name1'), ('name2'), ('name3'), ('name4');
select * from table1;
将产生
答案 1 :(得分:1)
目前还不清楚您遇到问题的哪个方面有问题,以及“默认”值是否表示SQL Server使用该术语的特定方式为“默认”。
假设您在四个插入的行上需要四个不同的随机数值,那么最简单的方法就是四个单独的insert
语句。就个人而言,我更喜欢insert . . . select
语法insert . . . values
,因为它更灵活:
INSERT INTO table (name, number)
SELECT 'name1', rand();
INSERT INTO table (name, number)
SELECT 'name2', rand();
INSERT INTO table (name, number)
SELECT 'name3', rand();
INSERT INTO table (name, number)
SELECT 'name4', rand();
在SQL Server中,如果将这些语句放入一个语句中,rand()
只会被评估一次,因此所有四行都将获得相同的值。一种典型的方法是使用checksum(newid())
或rand(checksum(newid()))
生成随机数。如果是这样,这将有效:
INSERT INTO table (name, number)
SELECT 'name1', rand(checksum(newid())) UNION ALL
SELECT 'name2', rand(checksum(newid())) UNION ALL
SELECT 'name3', rand(checksum(newid())) UNION ALL
SELECT 'name4', rand(checksum(newid()));
您还可以使用类似的逻辑为列设置默认值。如果您希望将“随机”数字绑定到名称,则可以在表达式中使用:name
而不是newid()
。
答案 2 :(得分:-1)
INSERT INTO demoSO (NAME, number)
VALUES ('name1',RAND()), ('name2',RAND()), ('name3',RAND()), ('name4',RAND())