我一直在将MSSQL DB迁移到MySQL中,面对一种语法,我在任何地方都找不到,需要此帮助。 所有“ MySQL参数”问题都涉及“ select * from mytable,其中id = @id”,但我正在寻找以下语法:
SELECT @MyParam = MyValue FROM MyTable
“ SELECT MyValue FROM MyTable”返回值时,运行上面的@MyParam查询将返回NULL。
从先前的答案中,我看到与MSSQL相反,在MySQL中,参数未使用任何数据类型预定义。
我在这里想念什么?
THX
答案 0 :(得分:2)
在:=
子句中将值分配给用户定义的变量时,需要使用=
运算符而不是SELECT
。以前是赋值运算符;而后者是比较运算符。
SELECT @MyParam := MyValue FROM MyTable
但是,如果使用SET
子句,则可以使用=
或:=
。来自docs:
对于SET,可以将=或:=用作赋值运算符。
更多来自文档的信息:
以这种方式进行分配(使用
SELECT
)时,您必须使用 :=作为赋值运算符; =被视为比较运算符 在SET以外的语句中。
答案 1 :(得分:1)
将MS SQL Server过程转换为MySQL过程时,最好使用用DECLARE
声明的局部变量。
@var
变量是用户定义的变量,作用域是过程。因此,如果您的过程调用其他过程,则变量值可能会更改,而局部变量不会更改。局部变量也具有定义的类型。
要转换MS SQL Server语法
SELECT @MyParam = MyValue FROM MyTable
使用MySQL:
DECLARE vMyParam int;
SELECT MyValue INTO vMyParam FROM MyTable;
格式:
SELECT @MyParam := MyValue FROM MyTable
将导致该过程产生额外的结果集,因此您可能不希望这样做。
使用:=
命令时,您可以使用SET
格式,在该命令中可以显式设置变量的值。
SET vMyParam = 10;