總體來說,
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語句預編譯集合,經過編譯後儲存在資料庫中,以乙個名稱儲存並作為乙個單元處理。儲存過程儲存在資料庫內,可由應用程式通過乙個呼叫執行,而且允許使用者宣告變數 帶引數執行以及其他強大的程式設計功能。儲存過程在第...