首页 > 解决方案 > 将 1 个随机记录从一个表转移到另一个表

问题描述

在 mssql 服务器上,我尝试将单个随机记录从一个表传输到另一个表

我的 sql 脚本应该

  1. 从名为“Test1”的表中选择一个随机记录
  2. 从表“Test1”中删除在步骤 1 中获得的特定记录
  3. 将此记录添加到表“Test2”

到目前为止我发现

从表 Test1 中获取一条随机记录

SELECT TOP 1 
    *
FROM 
    [Test1]
ORDER BY
    NEWID()

删除名为“uno”的列等于“1”的记录,并将已删除的记录放在名为“Test2”的表中

DELETE FROM
   [Test1]
OUTPUT
   deleted.*
FROM
   [Test2]
WHERE
   [uno] = '1'

我试过这个失败了

DELETE I FROM (
    SELECT 
        *
    FROM
        [Test1]
    ORDER BY
        NEWID()
) I
OUTPUT
    deleted.*
INTO
    [Test2]

这有效,但传输整个表而不是仅 1 个随机行

DELETE FROM
    [Test1]
OUTPUT
    deleted.*
INTO
    [Test2]
WHERE EXISTS (
        SELECT TOP 1 
            *
        FROM 
            [Test1]
        ORDER BY
            NEWID()
    )

我还尝试通过在变量中捕获函数 NEWID() 的结果来分别添加和删除,然后以这种方式插入和删除具有相同唯一 ID 的行

DECLARE @NewReportID uniqueidentifier 
SET @NewReportID = NEWID()

INSERT INTO
   [Test2]
SELECT TOP 1
   *
FROM
   [Test1]
ORDER BY
   @NewReportID
 
GO

DELETE TOP 1 FROM
   [Test1]
ORDER BY
   @NewReportID

但它失败了,因为没有办法使用ORDER BY变量

任何帮助将非常感激

标签: sqlsql-server

解决方案


WITH CTE AS (
SELECT TOP 1 
    *
FROM 
    [Test1]
ORDER BY
    NEWID()
)
DELETE FROM CTE 
OUTPUT deleted.*
INTO [Test2]

推荐阅读