sql - 更新表变量

标签 sql sql-server sql-server-2008

我有一个表变量 @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/

相关文章:

sql-server-2008 - 在 SQL Server 2008 数据库上附加 SQL Server 2008 R2 mdf 文件

SQL——从给定的开始日期计算结束日期,并带有任意中断

sql - 在 SQL 查询中将 Nvarchar DD/MM/YYYY 转换为 YYYY-MM-DD

sql - 自动在sql-server中增加一个非身份列

mysql - 在 mssql 中,用 '$$' 分隔的整数对单元格中的值求和,但数据类型为 varchar

sql - 禁止存储过程中的事务

sql - mysql 查询以查找表列中每一个非 ascii 字符的出现并将其替换为 HTML 等价物

作为变量插入的 MySql 过程值

sql-server - BULK INSERT 失败,行终止符位于最后一行

sql - nvarchar(X) 占用了多少页?