【问题标题】:Set input var of SQL stored procedure depending on it's value根据其值设置 SQL 存储过程的输入变量
【发布时间】:2017-08-05 13:21:27
【问题描述】:

我想将存储过程输入参数设置为静态 int 值或从子查询生成的值,具体取决于它的字符串值。

所以基本上我在我的存储过程开始时就有了这个;之后是用于创建新产品的常规 INSERT 查询。

IF @typeName = 'Unassigned'
BEGIN
    SET @typeName = 0;
END
ELSE
BEGIN
    SET @typeName = (SELECT type.id FROM shared.prod_type type
    WHERE type.name = typeName COLLATE utf8_unicode_ci);
END

这只是在 phpMyAdmin 中给我一个错误,说我的语法错误,但没有指明是哪一部分。

非常感谢任何帮助

【问题讨论】:

  • 什么是语法错误?它应该指向代码中的一行。
  • 它只是做了一个大的错误转储显示完整的查询并说check the manual that corresponds to your MySQL server version for the right syntax to use near 'BEGIN SET @typeName = 0; END ELSE BEGIN SET @typeName = (SELECT typ' at line 2

标签: mysql sql database stored-procedures phpmyadmin


【解决方案1】:

这个查询很可疑:

SELECT type.id
FROM shared.prod_type type
WHERE type.name = typeName COLLATE utf8_unicode_ci

如果您有一个名为typeName 的列或变量,它可能会起作用。但这可能是你想要的:

SELECT type.id
FROM shared.prod_type type
WHERE type.name = @typeName COLLATE utf8_unicode_ci

【讨论】:

  • 所以我有一个表单,用户可以从现有的产品类型中进行选择,也可以在创建新产品时即时创建自己的产品类型。因此,如果产品被标记为新产品类型,它将在创建产品之前在新表中创建该类型;因此该类型的 id 是未知的,因此我需要子查询根据名称返回产品的 id。 “未分配”不存储在数据库中,因为它只是任意术语;如果它是'未分配;我希望 var 的值为 0
  • 所以 type.name = typeName 是指原始参数的字符串值而不是修改后的var
猜你喜欢
  • 1970-01-01
  • 2022-12-18
  • 1970-01-01
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 2012-08-23
相关资源
最近更新 更多