更新表变量

Ego*_*gor 4 sql sql-server sql-server-2008

我有一个表变量@searchResult

DECLARE @searchResult TABLE (
    [name_template] NVARCHAR(50),
    [record_id] INT,
    [record_name] NVARCHAR(50)
);
Run Code Online (Sandbox Code Playgroud)

和表[records]

CREATE TABLE [records] (
    [record_id] INT IDENTITY(1, 1) PRIMARY KEY,
    [record_name] NVARCHAR(50)
)
Run Code Online (Sandbox Code Playgroud)

@searchResult只包含[name_template]填充的记录。我想与最新的更新它[record_id],并[record_name][records]表匹配[name_template]

我试过以下 SQL 查询但没有成功:

UPDATE @searchResult
SET [record_id] = r.[record_id], [record_name] = r.[record_name]
FROM (
    SELECT TOP 1
          r.[record_id]
        , r.[record_name]
    FROM [records] AS r
    WHERE r.[record_name] LIKE [name_template]
    ORDER BY r.[record_id] DESC
) AS r;
Run Code Online (Sandbox Code Playgroud)

错误信息:

无效的列名“name_template”。

@searchResult使用所需值更新的正确语法是什么?

Pra*_*mar 6

你需要CROSS APPLY在桌子上做一个。

UPDATE @searchResult
SET [record_id] = r.[record_id], 
    [record_name] = r.[record_name]
FROM @searchResult SR
CROSS APPLY (
    SELECT TOP 1 *
    FROM [records]
    WHERE [record_name] LIKE [name_template]   -- Your wish, but do you really need LIKE matching??
    ORDER BY [record_id] DESC
) AS r;
Run Code Online (Sandbox Code Playgroud)