Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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 Server能否自动将随机整数分配给标识列?_Sql_Sql Server_Tsql - Fatal编程技术网

SQL Server能否自动将随机整数分配给标识列?

SQL Server能否自动将随机整数分配给标识列?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一张大约50000行的桌子。每天都会删除数据,并在中导入大约50000行的最新数据。这是一个日常程序 数据需要在输出中按随机顺序排序,因此我们之前在Access中的做法是将标识设置为“随机”。这显示了一个随机整数,所以当通过此列对数据进行排序时,数据会很混乱 如何使用SQL Server复制此功能?我似乎无法通过使用种子函数和增量函数来解决这一问题,我知道分配一个随机数是可以的,直到它提取出一个重复数为止,不管几率有多小。如果可能的话,我真的不想在上面运行另一个过程来“插入”随机数,但如果这

我有一张大约50000行的桌子。每天都会删除数据,并在中导入大约50000行的最新数据。这是一个日常程序

数据需要在输出中按随机顺序排序,因此我们之前在Access中的做法是将标识设置为“随机”。这显示了一个随机整数,所以当通过此列对数据进行排序时,数据会很混乱


如何使用SQL Server复制此功能?我似乎无法通过使用种子函数和增量函数来解决这一问题,我知道分配一个随机数是可以的,直到它提取出一个重复数为止,不管几率有多小。如果可能的话,我真的不想在上面运行另一个过程来“插入”随机数,但如果这是唯一的方法,我会让步。

为什么不把它添加到你想要的查询中呢

order by newid()
我看不出有什么理由为这样的事情覆盖标识


如果愿意,可以使用newid作为identity列而不是identity列的默认值。这将为排序提供一个随机id。

为什么不将其添加到所需的查询中

order by newid()
我看不出有什么理由为这样的事情覆盖标识


如果愿意,可以使用newid作为identity列而不是identity列的默认值。这将为排序提供一个随机id。

为什么不在查询中使用order by newid?然后你总是会得到一个随机顺序。或者您需要随机化行,但能够多次获得相同的顺序?您可以使用NEWID列替换标识列以永久保持相同的随机顺序。您可以创建一个包含足够多整数的表,假设1到1000000,然后执行“从intTable中选择top 1 intval,其中intval不在MainTable的select keyField中,按newid排序”,然后将查询结果用作新的键值注意,随机并不意味着值是唯一的。为什么不在查询中仅使用order by newid?然后你总是会得到一个随机顺序。或者您需要随机化行,但能够多次获得相同的顺序?您可以使用NEWID列替换标识列以永久保持相同的随机顺序。您可以创建一个包含足够多整数的表,假设1到1000000,然后执行“从intTable中选择top 1 intval,其中intval不在newid从MainTable顺序中选择关键字字段中”,然后使用查询结果作为新的关键字值注意,random并不意味着这些值是唯一的。谢谢Gordon-第二部分是什么意思?在查询中未将其添加为order by的原因是,该视图将链接到输出上的Excel表。用户将不会在SSMS等中执行查询,我不知道NEWID函数是否在视图上工作?此外,如果GUID不为您执行,或者对范围有要求,则可以使用CRYPT_GEN_random自定义随机值,例如声明@t TABLEID BIGINT not NULL主键默认CONVERTBIGINT、CRYPT_GEN_RANDOM8;,按模调味/添加到口味。@RazorKillBen。NEWID在视图中工作,但orderby不工作。因此,如果你坚持在视图中排序,你就不能真正做你想做的事情。Weelll,旧的从t ORDER BY x中选择TOP2147483647技巧仍然有效,这对于一个有50000行的表来说还不错。我的意思是,你仍然不应该依赖订单,优化器现在能看穿像TOP100%这样的把戏,将来可能会看穿这一把戏,但它现在不这么做。如果可能的话,Cleaner是让Excel调用存储过程并使用其结果进行查询-我相信这是可行的。谢谢Gordon-第二部分是什么意思?在查询中未将其添加为order by的原因是,该视图将链接到输出上的Excel表。用户将不会在SSMS等中执行查询,我不知道NEWID函数是否在视图上工作?此外,如果GUID不为您执行,或者对范围有要求,则可以使用CRYPT_GEN_random自定义随机值,例如声明@t TABLEID BIGINT not NULL主键默认CONVERTBIGINT、CRYPT_GEN_RANDOM8;,按模调味/添加到口味。@RazorKillBen。NEWID在视图中工作,但orderby不工作。因此,如果你坚持在视图中排序,你就不能真正做你想做的事情。Weelll,旧的从t ORDER BY x中选择TOP2147483647技巧仍然有效,这对于一个有50000行的表来说还不错。我的意思是,你仍然不应该依赖订单,优化器现在能看穿像TOP100%这样的把戏,将来可能会看穿这一把戏,但它现在不这么做。如果可能的话,更干净的方法是让Excel调用存储过程并使用其结果进行查询——我相信这是可行的。