在select语句中使用一个单元格的值(与sqlcmd一起运行)

时间:2012-06-27 14:04:05

标签: sql sql-server tsql plsql sqlcmd

编辑:我的错误是在第一个select语句之后我有一个“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的范围只是下一个select语句,当我到达DECLARE之后的那个语句之后,它表示它没有被声明。

3 个答案:

答案 0 :(得分:1)

像这样使用

DECLARE @variableName int
SELECT @variableName = productID FROM mproducts WHERE .. 

SELECT ProductVersionID
FROM cb_mproductversions
WHERE ProductID = @variableName

答案 1 :(得分:1)

您可以合并两个查询:

SELECT ProductVersionID, 
FROM cb_mproductversions
WHERE ProductID IN
  (
     SELECT ProductID,
     FROM mproducts 
     WHERE (ProductCode='$(product)' or ProductCode='$(product)' or BuildSysProductCode='$(product)');
  )

我使用IN因为INNER查询可能会返回多个ProductID

答案 2 :(得分:0)

你可以这样做:

SELECT ProductVersionID, 
FROM cb_mproductversions
WHERE ProductID in 
(
    SELECT ProductID,
    FROM mproducts 
    WHERE (ProductCode='$(product)' or ProductCode='$(product)' or BuildSysProductCode='$(product)')
)