Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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 使用列前面定义的随机值插入值_Sql_Sql Server_Insert_Default - Fatal编程技术网

Sql 使用列前面定义的随机值插入值

Sql 使用列前面定义的随机值插入值,sql,sql-server,insert,default,Sql,Sql Server,Insert,Default,我们如何像下面那样插入默认值 INSERT INTO table1 (name, number = rand()) VALUES ('name1'), ('name2'), ('name3'), ('name4') 您只需更改/添加现有的默认值约束,并可能在以后恢复它,如果它只是临时的: ALTER TABLE table1 ADD CONSTRAINT def_number DEFAULT ABS(CHECKSUM(NewId())) FOR number; 现在你可以像这样插入它们 IN

我们如何像下面那样插入默认值

INSERT INTO table1 (name, number = rand())
VALUES ('name1'), ('name2'), ('name3'), ('name4')

您只需更改/添加现有的
默认值
约束,并可能在以后恢复它,如果它只是临时的:

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;
将产生


不清楚您在问题的哪个方面遇到了问题,也不清楚“默认”值是否表示SQL Server使用该术语的特定方式中的“默认”

假设您希望在四个插入行上有四个不同的随机数值,最简单的方法是使用四个独立的
insert
语句。就个人而言,我更喜欢
插入。选择
syntax to
insert。值
,因为它更灵活:

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()

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()));