我有一个表变量 @searchResult
:
DECLARE @searchResult TABLE (
[name_template] NVARCHAR(50),
[record_id] INT,
[record_name] NVARCHAR(50)
);
和表
[records]
:CREATE TABLE [records] (
[record_id] INT IDENTITY(1, 1) PRIMARY KEY,
[record_name] NVARCHAR(50)
)
@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;
错误信息:
Invalid column name 'name_template'.
更新的正确语法是什么
@searchResult
具有所需的值?
最佳答案
你需要做一个 CROSS APPLY
在 table 上。
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;
关于sql - 更新表变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36263362/