【问题标题】:Using value of one cell in a select statement (running with sqlcmd)在选择语句中使用一个单元格的值(使用 sqlcmd 运行)
【发布时间】:2012-06-27 14:04:04
【问题描述】:

编辑:我的错误是我在第一个 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 之后的那个之后,它说它没有被声明。

【问题讨论】:

    标签: sql sql-server tsql plsql sqlcmd


    【解决方案1】:

    这样使用

    DECLARE @variableName int
    SELECT @variableName = productID FROM mproducts WHERE .. 
    
    SELECT ProductVersionID
    FROM cb_mproductversions
    WHERE ProductID = @variableName
    

    【讨论】:

    • 谢谢。我的错误是我在第一个 select 语句之后有一个“go”,这会导致 @variableName 超出范围。
    • @AryanGoharzad 请注意,如果第一个查询返回多个 productID,这将失败。
    • 嗯 .. 不错。我想我总是必须获得“前 1”,因为产品 ID 是唯一的。
    【解决方案2】:

    您可以组合这两个查询:

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

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

    【讨论】:

      【解决方案3】:

      你可以这样做:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-31
        • 1970-01-01
        • 2011-06-19
        • 1970-01-01
        • 1970-01-01
        • 2020-01-18
        • 1970-01-01
        相关资源
        最近更新 更多