亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MYSQL與SQLserver之間存儲過程的轉(zhuǎn)換方式

 更新時間:2022年11月28日 09:05:01   作者:AI_Frank  
這篇文章主要介紹了MYSQL與SQLserver之間存儲過程的轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

MYSQL與SQLserver之間存儲過程的轉(zhuǎn)換

首先先放兩個存儲過程來進行對比

mysql存儲過程

CREATE DEFINER=`root`@`%` PROCEDURE `searchProduct`(
?? ?
?? ?IN cone VARCHAR ( 30 ),
?? ?IN ctow VARCHAR ( 30 ),
?? ?
?? ?IN page INT,
?? ?IN size INT
?? ?)
BEGIN
?? ? ?? ?set @s='SELECT * ? FROM ?? ?productclass where status=0';
?? ??
-- ? ? if(pname is not null) and pname!=''
-- ? ? then set @s=concat(@s,' and product LIKE \'','%',pname,'%','\'');
-- ? ? end if;
? ? if(cone is not null) and cone!=''
? ? then set @s=concat(@s,' and class1 ?LIKE \'','%',cone,'%','\'');
? ? end if;
? ? if(ctow is not null) and ctow!=''
? ? then set @s=concat(@s,' and class2 ?LIKE \'','%',ctow,'%','\'');
? ? end if;
?? ??? ?
?? ??? ?
?? ??? ?set @s=concat(@s,' ORDER BY class1,class2,class3,class4');
?? ??? ?if(size>0) then
?? ??? ?set @s=concat(@s,' limit ',(page-1)*size,',',size);
?? ??? ?end if;
? ? -- 拼接完成后可以調(diào)用 select @s 語句,查看最終拼接的sql語句是否正確
? ? prepare stmt from @s;-- 預(yù)編譯一條sql語句,并命名為stmt
? ? execute stmt;-- 執(zhí)行預(yù)編譯sql
END

sqlserver存儲過程

ALTER PROCEDURE [dbo].[searchProduct]
@cone VARCHAR ( 30 ),@ctow VARCHAR ( 30 ),@page INT,@size INT
AS
BEGIN
?? ?-- routine body goes here, e.g.
?? ?-- SELECT 'Navicat for SQL Server'
?? ?declare @s Nvarchar(MAX);
?? ?set @s='SELECT * ? FROM ?? ?productclass where status=0';
?? ??
-- ? ? if(pname is not null) and pname!=''
-- ? ? then set @s=concat(@s,' and product LIKE \'','%',pname,'%','\'');
-- ? ? end if;
? ? if(@cone is not null) and @cone!=''
?? ??? ?BEGIN
?? ??? ??? ?set @s=concat(@s,' and class1 ?LIKE ','''%',@cone,'%''');
? ? END
? ? if(@ctow is not null) and @ctow!=''
? ? BEGIN
?? ??? ??? ?set @s=concat(@s,' and class2 ?LIKE ','''%',@ctow,'%''');
? ? END
?? ??? ?
?? ??? ?
?? ??? ?set @s=concat(@s,' ORDER BY class1,class2,class3,class4');
?? ??? ?if(@size>0)
?? ??? ?BEGIN
?? ??? ??? ?set @s=concat(@s,'( select top ',@size,' id from productclass?
?? ??? ??? ??? ??? ??? ??? ?where id not in ( ?
?? ??? ??? ??? ??? ??? ??? ?select top ', (@page-1)*@size,' id from productclass ?
?? ??? ??? ??? ??? ?))')
?? ??? ?END
? ? -- 拼接完成后可以調(diào)用 select @s 語句,查看最終拼接的sql語句是否正確
?? ??? ?print(@s)
?? ??? ?EXEC sp_executesql @s;
END

綜合以上同一功能函數(shù)在不同的數(shù)據(jù)庫中的規(guī)則不同,總結(jié)如下幾點區(qū)別與相互之間的轉(zhuǎn)換規(guī)則:

(1)對于輸入?yún)?shù)來說

  • mysql使用IN cone VARCHAR ( 30 )
  • sqlserver使用@cone VARCHAR ( 30 )

注意對于參數(shù)在下面語句使用中,mysql可以直接使用名稱,二sqlserver要加上@符號

(2)對于語句的set來說

  • mysql可以直接set 變量
  • sqlserver需要在之前事先聲明變量后才可以使用

(3)對于if語句的執(zhí)行

  • mysql使用if 過程 endif
  • sqlserver使用 if begin 過程 end

(4)對于定義sql語句的執(zhí)行

  • mysql使用prepare stmt from @s; execute stmt;進行預(yù)編譯和執(zhí)行
  • sqlserver使用EXEC sp_executesql @s

注意:sqlserver也可以使用exec(@s),這樣的話變量聲明一般是varchar類型,若使用sp_executesql必須是Nvarchar的定義類型,具體的區(qū)別可以自行百度查詢

SQLserver轉(zhuǎn)MYSQL存儲過程的經(jīng)驗

總體來說,sql sever和Mysql的存儲過程的思路都是一樣的,但是在語法和結(jié)構(gòu)上還是有很大的區(qū)別的,可以使用如下的轉(zhuǎn)換方式。

1. 存儲過程的定義方式存在區(qū)別

CREATE proc p1
aa int
bb varchar(255) output
as
CREATE PROCEDURE p1(
in aa int,
out bb varchar(255)
) begin
statement_list
end;

2. 批處理分隔符存在差異

GOdelimiter $$

3. 可直接替換的關(guān)鍵字

smalldatetimedatetime
moneyDECIMAL(18,4)
numericDECIMAL
max8000
isnullifnull
getdatenow
dbo.

4. select語句起別名的方式有區(qū)別

select 'sunday' day;SELECT 'sunday' AS day;

5. if語句的結(jié)構(gòu)存在區(qū)別

if condition
statement
else
statement
if condition then
statement
else
statement
end if;

6. cast語句的目標類型存在區(qū)別

目標類型可以是任意類型目標類型可以是以下類型之一:BINARY,CHAR,DATE,DATETIME,TIME,DECIMAL,SIGNED,UNSIGNED

7. 動態(tài)SQL執(zhí)行語句的書寫方式存在區(qū)別

exec(@sql)PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

8. 調(diào)用其它存儲過程的方式存在區(qū)別

exec p1 @v1,@v2,@v3 outputcall p1(hy_v1,hy_v2,@v3 output );

9. 創(chuàng)建臨時表的書寫方式存在區(qū)別

select 表字段 into #臨時表名稱
from 正常表
CREATE TEMPORARY TABLE IF NOT EXISTS 臨時表名稱 AS
SELECT 表字段名稱 FROM 表名稱;

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • mysql實現(xiàn)按組區(qū)分后獲取每組前幾名的sql寫法

    mysql實現(xiàn)按組區(qū)分后獲取每組前幾名的sql寫法

    這篇文章主要介紹了mysql實現(xiàn)按組區(qū)分后獲取每組前幾名的sql寫法,具有很好的參考價值,希望對大家有所幫助。
    2023-03-03
  • MySQL一些常用高級SQL語句

    MySQL一些常用高級SQL語句

    對 MySQL 數(shù)據(jù)庫的查詢,除了基本的查詢外,有時候需要對查詢的結(jié)果集進行處理。例如只取 10 條數(shù)據(jù)、對查詢結(jié)果進行排序或分組等等,今天就給大家分享MySQL一些常用高級SQL語句,感興趣的朋友一起看看吧
    2021-07-07
  • MySQL壓縮版zip安裝問題的解決方法

    MySQL壓縮版zip安裝問題的解決方法

    這篇文章主要給大家介紹了關(guān)于MySQL壓縮版zip安裝問題的解決方法,文中介紹的非常詳細,對大家的學習或者使用mysql具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • 解析MySQL隱式轉(zhuǎn)換問題

    解析MySQL隱式轉(zhuǎn)換問題

    本文通過實例代碼給大家介紹了MySQL隱式轉(zhuǎn)換問題,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • mysql中Table is read only的解決方法小結(jié)

    mysql中Table is read only的解決方法小結(jié)

    本文章總結(jié)了關(guān)于在linux與windows中 mysql出現(xiàn)Table is read only解決辦法總結(jié),有需要的朋友可參考一下
    2013-01-01
  • windows下傻瓜式安裝mysql5.7

    windows下傻瓜式安裝mysql5.7

    本文給大家介紹的是簡單幾步輕松搞定Windows上安裝Mysql5.7,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • MySQL中Union子句不支持order by的解決方法

    MySQL中Union子句不支持order by的解決方法

    這篇文章主要介紹了MySQL中Union子句不支持order by的解決方法,結(jié)合實例形式分析了在mysql的Union子句中使用order by的方法,需要的朋友可以參考下
    2016-06-06
  • 一文帶你了解MySQL之約束

    一文帶你了解MySQL之約束

    在SQL標準中,一共規(guī)定了6種不同的約束,包括非空約束,唯一約束和檢查約束等,而在MySQL中是不支持檢查約束的,所以這篇文章先對其余5種約束做一個詳解和練習,需要的朋友可以參考下
    2023-06-06
  • 超詳細的SQL語句語法匯總

    超詳細的SQL語句語法匯總

    個人整理的一些比較常用的SQL語句語法。需要的朋友可以過來參考下
    2013-08-08
  • MySQL緩存的查詢和清除命令使用詳解

    MySQL緩存的查詢和清除命令使用詳解

    這篇文章主要介紹了MySQL緩存的查詢和清除命令使用詳解,對于一些不常改變數(shù)據(jù)且有大量相同sql查詢的表,查詢緩存會顯得比較有用一些,需要的朋友可以參考下
    2015-12-12

最新評論