【问题标题】:Query in mysql Stored Proc falsely returning null在 mysql Stored Proc 中查询错误地返回 null
【发布时间】:2012-01-23 22:12:15
【问题描述】:

我正在尝试使用 SELECT - INTO 语句设置变量列表,但是当查询应该找到一行时,我遇到了一些返回空数据的问题。真正奇怪的部分是,如果我选择某个列它可以工作,但它不会与任何其他列一起工作。为了一次解决一个问题,我简化了查询。这是我要运行的内容:

SELECT Product_1 INTO @Product_1
FROM STG_XREF_ELS_PRODUCTS
WHERE MarketName = @ThisMarketName
LIMIT 1;

此语句不起作用,但是如果我输入相同的确切查询但选择不同的字段,它可以正常工作...

SELECT MarketName INTO @Product_1
FROM STG_XREF_ELS_PRODUCTS
WHERE MarketName = @ThisMarketName
LIMIT 1;

值得注意的是,我已经测试以确保这不是 Product_1 实际上为空的情况,我的外部参照表中没有 Product_1 为空的实例。另外,如果我只是从表中选择 Product_1,限制为 1 并且没有 where 子句,我仍然会得到一个空结果。

我也尝试过使用:

set @Product1 = (select Product_1 
                 FROM STG_XREF_ELS_PRODUCTS 
                 WHERE MarketName = @ThisMarketName);

提前感谢您的帮助!

附言

【问题讨论】:

  • 仅供参考:MySQL 中的 @ 表示法表示会话变量。在 t-sql 中,@ 表示一个局部变量。在 MySQL 中,局部变量不需要任何前缀。小心在 MySQL 中使用 session 变量,因为它的值可能不是你所期望的(我看到很多使用 MySQL 的 SQL 服务器人员,如果不是这种情况,请继续)
  • 你试过用反引号吗?

标签: mysql stored-procedures select


【解决方案1】:

尝试更改变量的名称:

选择 Product_1 到 @Product_variable 来自 STG_XREF_ELS_PRODUCTS WHERE 市场名称 = @ThisMarketName 限制 1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 2012-03-20
    • 1970-01-01
    相关资源
    最近更新 更多