[英]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.