Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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_Random - Fatal编程技术网

如何在SQL中按随机顺序洗牌行并将结果保存在新表中?

如何在SQL中按随机顺序洗牌行并将结果保存在新表中?,sql,sql-server,random,Sql,Sql Server,Random,所以我有一张叫“顾客”的桌子 id | name ------------ 1 Tom 2 Bob 3 Sam 4 Angel 5 Joe selec

所以我有一张叫“顾客”的桌子

                     id  | name
                    ------------
                     1     Tom
                     2     Bob
                     3     Sam
                     4     Angel
                     5     Joe
       select Name into TestTable from Customer order by NEWID() 
       select * from TestTable
我想以随机顺序选择“name”列中的行,并将这些行插入到新表中,我尝试了以下方法

       select Name into TestTable from Customer order by NEWID() 
       select * from TestTable
但它不起作用?TestTable中的行与原始表中的行顺序相同

       select Name into TestTable from Customer order by NEWID() 
       select * from TestTable
                         Tom
                         Bob
                         Sam
                         Angel
                         Joe

我尝试了多次执行,但每次的结果都是一样的。看起来这些行是在随机化发生之前插入到新表中的。有什么想法吗?

表格中的行没有顺序。它们代表无序的集合。如果希望行按随机顺序排列,则在提取行时按顺序排列:

       select Name into TestTable from Customer order by NEWID() 
       select * from TestTable
select name
from testtable
order by newid();
或者,您可以添加一个
标识
列,该列应保留
分组依据的顺序

       select Name into TestTable from Customer order by NEWID() 
       select * from TestTable
select identity(int) as id, Name
into TestTable
from Customer order by NEWID();

select *
from TestTable
order by id;
他是一把小提琴

       select Name into TestTable from Customer order by NEWID() 
       select * from TestTable
注意:事实上,我很惊讶您的示例不适用于一小部分数据。我可能猜这是SQL Server实现的一种优化,以避免对数据进行排序,因为它知道表是无序的。然而,
identity()
函数用于保持顺序

       select Name into TestTable from Customer order by NEWID() 
       select * from TestTable