编辑:我的错误是我在第一个选择语句之后有一个"go",这会导致@variableName超出范围。
我有一堆相互依赖的查询,我想在另一个查询中使用第一个查询返回的值。例如,我想使用第一个查询的产品 ID:
SELECT ProductID,
FROM mproducts
WHERE (ProductCode='$(product)'
or ProductCode='$(product)'
or BuildSysProductCode='$(product)');
在第二个
SELECT ProductVersionID,
FROM cb_mproductversions
WHERE ProductID=***variableName***
go
我研究了变量,我已经看到了几种将值存储到变量中的方法,例如
DECLARE @variableName
SELECT @variableName AS productID
FROM mproducts
...
但似乎@variableName的范围只是下一个选择语句,当我到达 DECLARE 之后的语句时,它说它没有声明。
像这样使用它
DECLARE @variableName int
SELECT @variableName = productID FROM mproducts WHERE ..
SELECT ProductVersionID
FROM cb_mproductversions
WHERE ProductID = @variableName
您可以组合这两个查询:
SELECT ProductVersionID,
FROM cb_mproductversions
WHERE ProductID IN
(
SELECT ProductID,
FROM mproducts
WHERE (ProductCode='$(product)' or ProductCode='$(product)' or BuildSysProductCode='$(product)');
)
我使用IN
因为 INNER 查询可能会返回多个ProductID
。
你可以做:
SELECT ProductVersionID,
FROM cb_mproductversions
WHERE ProductID in
(
SELECT ProductID,
FROM mproducts
WHERE (ProductCode='$(product)' or ProductCode='$(product)' or BuildSysProductCode='$(product)')
)