declare @t (row int indentity,key varchar(30)),@n int
insert @t(key) select key from table2
set @n=@@identity
insert table1 (foreignkey1,foreignkey2,foreignkey3,foreignkey4)
  select 
    (select key from @t where row=cast(rand()*@n+1 as int) foreignkey1
    (select key from @t where row=cast(rand()*@n+1 as int) foreignkey2
    (select key from @t where row=cast(rand()*@n+1 as int) foreignkey3
    (select key from @t where row=cast(rand()*@n+1 as int) foreignkey4

解决方案 »

  1.   

    =@@identity 这一句的语法记不太清楚了,自己查一下。
      

  2.   

    declare @t (row int indentity primary key,key varchar(30)),@n int
      

  3.   

    INSERT INTO [table1]
          (foreignkey1,2,3,4)
    SELECT TOP 4 key
    FROM [table2]
    group by key
      

  4.   

    对于查询一条随机记录,select top 1 * from myTable order by newid()也慢得要死,就是慢在newid()思想:SQL Server要建立一个内部表,在一个很长的字符串上对所有数据重新排序一遍。
      

  5.   

    任何时候,尽可能不要使用order by 语句。