sql Sever的儲存過程轉換為mysql的

2022-02-12 17:29:27 字數 3237 閱讀 2020

總體來說,

sql sever

和mysql

的儲存過程的思路都是一樣的,但是在語法和結構上還是有很大的區別的。

1. 在

mysql

中寫儲存過程所有的

dbo都要去掉。

2. 每乙個sql語句後面都需要加上;否則報錯;

4. 再說引數,在

mssql

中我們一般會這麼定義引數

create procedure proc_st

(@operator varchar(300),

@procdate datetime,

@errorlog varchar(8000) output)

但是在mysql

中這種格式是不可以的;

首先在mysql

中輸入引數是

in來表示,輸出引數是

out表示,如果不寫,預設是

in,其次在

mysql

中是沒有

@符號的,所以所有的

@符號都要去掉

上述儲存過程改寫成

mysql

的話

create procedure proc_st

(in operator varchar(300),

in procdate datetime,

out errorlog varchar(8000)

)

5.關於時間的問題

5.1 

獲取時間格式

在mssql

中我們來獲取時間一般用

convert

來表示,例如

set@yearmonth = convert(varchar(6),@procdate,112);

這句話的意思就是獲取時間的年月並且格式是

yyyymm

的,112

代表的是一種格式;

但是在mysql

中我修改的時候卻一直報錯,所以我換了一種寫法

year(now())*100+month(now())

這樣就可以了;

5.2轉換時間格式

同樣的,在

mssql

中用convert(varchar(6),

引數,112) = @yearmonth 

就可以使用,但是在

mysql

中我用的是

cast

強制轉換才可以

cast(

rep.fact_date

as char(6) )

6.關於

if的使用

在mssql中用

if()

begin

程式片段

endelse

begin

程式片段

end就可以;

但是在mysql

中是不認的,

if的後面必須有

then

,而且每乙個

else if

的後面必須有

;作為結束符號,否則不管你怎麼除錯也是過不去的

下面的是我改寫的乙個函式,比較簡單,主要是比較一下語法

create functionloan_period

(begindate int,

enddate int

)returnsvarchar(8000)

begin

if(enddate-begindate <= '3')

then

return '10';

end if;

if(enddate-begindate>'3' andenddate-begindate <= '6')

then

return '20';

end if;

if(enddate-begindate>'6' andenddate-begindate <= '12')

then

return '30';

end if;

return '40';

end

7.關於在時間的增加或者減少

我們一般在

mssql

中想得到日期的上乙個月一般會這麼寫

convert (varchar(6),dateadd ("month", -1, @procdate), 112)

dateadd

是mssql

的內建函式;

但是在mysql

中是沒有這個函式的,那我們應該怎麼辦呢,別著急,在

mysql

中有date_sub

函式,基本上也能滿足我們的需求,上面這句話改寫完成後

cast(date_sub(procdate,interval1 month) as char(6))

8.關於表變數

在mysql

中時不存在表變數這個概念的,但是卻可以用臨時表來代替,在

mysql

中我們創業臨時表一般用

createtemporary

table temptotal 

來進行建立,還有一點好處,就是臨時變數在儲存過程執行完會自動釋放,不會占用大量記憶體;

9.在mssql

中會常常用到下面這個宣告

declare@temp

varchar (max);

但是在mysql

中沒有max

這個概念,我一般會用

varcahr

(8000

)來替代,網上眾說紛紜,說

varchar

最大值多少的都有,我沒試驗過,改寫的時候慎用。

10.在

mssql

中金融產品化會常常用到下面這個宣告

declare@temp

varchar (max);

但是在mysql

中沒有max

這個概念,我一般會用

varcahr

(8000

)來替代,網上眾說紛紜,說

varchar

最大值多少的都有,我沒試驗過,改寫的時候慎用。

11. 在

mysql

中沒有isnull

函式,所以我們用

ifnull

來代替,用法一樣;

以上就是我改寫的過程中碰到的一些問題,希望對大家能有所幫助吧!

sqlsever儲存過程

create procedure dbo procregisterflow pageindex int,pagesize int,sqllogiccode int output,sqllogicmsg varchar 1000 output,sqlerrorcode int output,sqler...

SQL Sever 儲存過程的建立和執行

無參的儲存過程建立 create procedure pro test1 asbegin select from student where stuid 1 end 查詢儲存過程 exec pro test1 declare return value int exec return value db...

sql sever 儲存過程總結及實驗

定義 儲存過程是資料庫中的乙個功能,是一組為了完成特定功能 可以接收和返回使用者引數的t sql語句預編譯集合,經過編譯後儲存在資料庫中,以乙個名稱儲存並作為乙個單元處理。儲存過程儲存在資料庫內,可由應用程式通過乙個呼叫執行,而且允許使用者宣告變數 帶引數執行以及其他強大的程式設計功能。儲存過程在第...