繁体   English   中英

SQL - 如何使用 INSERTed 表中的值

[英]SQL - How to use a value from INSERTed table

我正在尝试在我的数据库中插入一个新的位置记录......然后稍后在 select 语句的 where 子句中重用新创建的 id 的值。 但我收到语法错误。

代码:

USE Widgets;
GO
DECLARE     @userPrincipalName VARCHAR(100),
            @displayName VARCHAR(100),
            @domainName VARCHAR(100),
            @locationId INT,
            @uname VARCHAR(100);
DECLARE     @newLocationId TABLE (
            id INT
            );

-- CREATE NEW LOCATION, FLAG AS PRIMARY

IF NOT EXISTS (SELECT *
                FROM Locations
                WHERE LocationName = 'outer-space')
    BEGIN
        INSERT INTO Locations
        OUTPUT Inserted.ID INTO @newLocationId
        SELECT 'out-space' ,'the final frontier', 60, 1
    END

-- MUCH LATER IN THE SQL CODE:

IF NOT EXISTS (SELECT *
                FROM LocationEnvironment
                WHERE LocationId = @newLocationId.id
                )
    BEGIN
        INSERT INTO LocationEnvironment
        SELECT 1, id
        FROM @newLocationId
    END

错误是“必须声明标量变量”,它在 SELECT 语句中的 WHERE 子句中消失。

我也尝试过这样的事情:

IF NOT EXISTS (SELECT *
                FROM LocationEnvironment
                WHERE LocationId = id
                FROM @newLocationId
                )

但这也行不通。 任何提示将不胜感激。

我认为您需要在 SQL CODE 部分中更新 WHERE 子句以从临时表中进行选择:

WHERE LocationId = @newLocationId.id

应该:

WHERE LocationId = (select top 1 id from @newLocationId)

或者,如果您的表变量中可能有多个值:

WHERE LocationId in (select id from @newLocationId)

在 SQL 代码后面添加一个GO语句-- MUCH LATER IN THE SQL CODE:

这会将上述语句发送到服务器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM