文章目錄
sql server和mysql都是我們經常用到的資料庫系統,下面就為您介紹sql server和mysql變數賦值的區別,希望對您能有所啟迪。
sql server中變數要先申明後賦值:
局部變數用一個@標識,全域變數用兩個@(常用的全域變數一般都是已經定義好的);
申明局部變數文法:declare @變數名 資料類型;例如:declare @num int;
賦值:有兩種方法式(@num為變數名,value為值)
set @num=value; 或 select @num=value;
如果想擷取查詢語句中的一個欄位值可以用select給變數賦值,如下:
select @num=欄位名 from 表名 where ……
mysql變數賦值不用事前申明,在用的時候直接用“@變數名”使用就可以了。
第一種用法:set @num=1; 或set @num:=1; //這裡要使用變數來儲存資料,直接使用@num變數
第二種用法:select @num:=1; 或 select @num:=欄位名 from 表名 where …… (張英:似乎mysql中不能使用 select @p1 := c1, @p2:=c2 from tb 方式賦值)
注意上面兩種賦值符號,使用set時可以用“=”或“:=”,但是使用select時必須用“:=賦值”
mysql可以在SP中聲明不帶@的局部變數,具體見declare。
Declare
20.2.8. DECLARE語句
DECLARE語句被用來把不同項目局域到一個 子程式:局部變數(請參閱20.2.9節,“儲存程式中的變數”),條件和 處理常式(請參閱20.2.10節,“條件和處理常式”) 及游標(請參閱20.2.11節,“游標”)。SIGNAL和RESIGNAL語句當前還不被支援。
DECLARE僅被用在BEGIN ... END複合陳述式裡,並且必須在複合陳述式的開頭,在任何其它語句之前。
游標必須在聲明處理常式之前被聲明,並且變數和條件必須在聲明游標或處理常式之前被聲明。
20.2.9. 儲存程式中的變數
20.2.9.1. DECLARE局部變數
20.2.9.2. 變數SET語句
20.2.9.3. SELECT ... INTO語句
你可以在子程式中聲明並使用變數。
20.2.9.1. DECLARE局部變數
DECLARE var_name[,...] type [DEFAULT value]
這個語句被用來聲明局部變數。要給變數提供一個預設值,請包含一個DEFAULT子句。值可以被指定為一個運算式,不需要為一個常數。如果沒有DEFAULT子句,初始值為NULL。
局部變數的作用範圍在它被聲明的BEGIN ... END塊內。它可以被用在嵌套的塊中,除了那些用相同名字 聲明變數的塊。
20.2.9.2. 變數SET語句
SET var_name = expr [, var_name = expr] ...
在儲存程式中的SET語句是一般SET語句的擴充版本。被參考變數可能是子程式內聲明的變數,或者是全域伺服器變數。
在儲存程式中的SET語句作為預先存在的SET文法的一部分來實現。這允許SET a=x, b=y, ...這樣的擴充文法。其中不同的變數類型(局域 聲明變數及全域和集體變數)可以被混合起來。這也允許把局部變數和一些只對系統變數有意義的選項合并起來。在那種情況下,此選項被識別,但是被忽略了。
20.2.9.3. SELECT ... INTO語句
SELECT col_name[,...] INTO var_name[,...] table_expr
這個SELECT文法把選定的列直接儲存到變數。因此,只有單一的行可以被取回。
SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
注意,使用者變數名在MySQL 5.1中是對大小寫不敏感的。請參閱9.3節,“使用者變數”。
重要: SQL變數名不能和列名一樣。如果SELECT ... INTO這樣的SQL語句包含一個對列的參考,並包含一個與列相同名字的 局部變數,MySQL當前把參考解釋為一個變數的名字。例如,在下面的語句中,xname 被解釋為到xname variable 的參考而不是到xname column的:
CREATE PROCEDURE sp1 (x VARCHAR(5))
BEGIN
DECLARE xname VARCHAR(5) DEFAULT 'bob';
DECLARE newname VARCHAR(5);
DECLARE xid INT;
SELECT xname,id INTO newname,xid
FROM table1 WHERE xname = xname;
SELECT newname;
END;
當這個程式被調用的時候,無論table.xname列的值是什麼,變數newname將傳回值‘bob’。