如何將SQL 從Microsoft SQL Server 數(shù)據(jù)庫轉(zhuǎn)換到SAP HANA數(shù)據(jù)庫
1 使用SQL轉(zhuǎn)換器
該工具將輸入文件(Microsoft SQL 服務(wù)器數(shù)據(jù)庫中的SQL)轉(zhuǎn)換為輸出文件(可以用在SAP HANA數(shù)據(jù)庫中的SQL).
你可以使用命令行或GUI模式運行SQL轉(zhuǎn)換器.
注意
SQL轉(zhuǎn)換器僅轉(zhuǎn)換你在Microsoft SQL 服務(wù)器數(shù)據(jù)庫中成功運行的SQL.
先決條件
· 你要在使用 SQL轉(zhuǎn)換器的計算機上安裝.Net Framework 4.0 或更高版本.
· 在要使用SQL轉(zhuǎn)換器的計算機上安裝了SAP HANA 數(shù)據(jù)庫客戶端軟件(32位).更多信息,請參閱SAP幫助門戶上的SAP HANA 數(shù)據(jù)庫 – 客戶端安裝指南,網(wǎng)址為http://help.sap.com/hana_appliance.
注意
即使你的Microsoft Windows 是 64 位,你也必須安裝32 位SAP HANA 數(shù)據(jù)庫客戶端軟件.
· 你已經(jīng)下載了SQL 轉(zhuǎn)換器.zip 文件.
· 你確保要轉(zhuǎn)換的SQL 可以在Microsoft SQL 數(shù)據(jù)庫中成功運行.
步驟
· 要使用命令行運行SQL轉(zhuǎn)換器,請按照以下步驟操作:
1. 將SQL轉(zhuǎn)換器.zip文件解壓縮到計算機上的任何位置.
2. 在Microsoft Windows命令窗口中,瀏覽到SQL轉(zhuǎn)換文件夾.更多有關(guān)Microsoft Windows 命令的詳細信息,請參閱Microsoft Windows在線幫助中的命令行參考.
3. 輸入 Converter.exe
如果你不使用某個命令行參數(shù),系統(tǒng)將根據(jù)你在配置文件中為該參數(shù)定義的設(shè)置運行該工具.命令行中的參數(shù)將覆蓋你在配置文件中定義的參數(shù).有關(guān)更多信息,請參閱配置文件和命令行參數(shù).
注意
如果輸入文件中有多個語句,請用分號";"分割.轉(zhuǎn)換后,轉(zhuǎn)換的語句將根據(jù)原始序列列在輸出文件中.
例如,輸入文件如下:
select CardCode, CardName from OCRD where CardType = 'C';
select max(DocEntry) from ORDR;
轉(zhuǎn)換后,輸出文件如下:
SELECT "CardCode", "CardName" FROM OCRD WHERE "CardType" = 'C';
SELECT MAX("DocEntry") FROM ORDR;
· 使用GUI模式運行SQL轉(zhuǎn)換器,請按照以下步驟操作:
1. 將SQL轉(zhuǎn)換器.zip文件解壓縮到計算機上的任何位置.
4. 在SQL轉(zhuǎn)換器文件夾中,雙擊Converter.exe.
或者,在Microsoft Windows 命令窗口中,瀏覽到SQL轉(zhuǎn)接器文件夾,然后輸入Converter.exe –g.
SQL轉(zhuǎn)換器窗口彈出.
有關(guān)設(shè)置的詳細信息,請參閱命令行參數(shù).
5. 在SQL轉(zhuǎn)換器窗口中,選擇一個配置文件.默認情況下,在SQL轉(zhuǎn)換器文件夾中選擇Config.txt文件. 更多關(guān)于配置文件的信息,請參閱配置文件和命令行參數(shù).
你還可以在運行轉(zhuǎn)換器時修改常規(guī)設(shè)置區(qū)域中的設(shè)置.
6. 在SQL 轉(zhuǎn)換器窗口中,選擇一個輸入文件,或者輸入要轉(zhuǎn)換的SQL.
7. 要運行轉(zhuǎn)換器,請在SQL轉(zhuǎn)換器窗口中,執(zhí)行以下操作之一:
o 選擇(運行轉(zhuǎn)換器) 圖標(biāo).
o 選擇命令 → 運行轉(zhuǎn)換器.
o 選擇F5鍵盤按鈕.
在輸入文件或輸入框中SQL已被轉(zhuǎn)換,同時轉(zhuǎn)換報告窗口彈出.
你可以在輸出框中找到已經(jīng)轉(zhuǎn)換的SQL.
8. 要將已轉(zhuǎn)換的SQL保存到輸出文件,請選擇輸出文件字段旁邊的(保存)圖標(biāo).
結(jié)果
定義的SQL從T-SQL 語法轉(zhuǎn)換為 ANSI-SQL 語法.你可以對已轉(zhuǎn)換版本執(zhí)行檢查來確保根據(jù)你的需要結(jié)果是正確的.
1.1 配置文件
你可以使用Config.txt文件來儲存不經(jīng)常更改的參數(shù).命令行中的參數(shù)會覆蓋在配置文件中定義的參數(shù).如果不使用某個命令行參數(shù),系統(tǒng)將根據(jù)你在配置文件中為該參數(shù)定義的設(shè)置運行該工具.
更多關(guān)于參數(shù)的信息,請參閱命令行參數(shù).
注意
如果配置文件中包含同一個參數(shù)的多個行或值,那么最后一行或值被使用.
例如
配置文件的示例如下:
// If UseCaseFixer=true, DB objects (tables, columns,...) will be verified.
// If UseCaseFixer=false, DB objects will NOT be verified but the SQL converter will run faster.
UseCaseFixer=false
// Case fixer will use the following DB settings:
DBServer=10.55.178.115:30915
DBSchema=SBODEMOUS
DBUser=SYSTEM
DBPasswd=Manager111
// End of DB settings for the case fixer
// Exclude conversion comments from the output file or not
DisableComments=false
// Specify names for the input and output files
InputFile= c:WorkDirPresentationsHANATranslator_0912Examples.sql
OutputFile= c:WorkDirPresentationsHANATranslator_0912output.sql
// Format the output file in clean and professional SQL layout or not
Formatter=false
// Definition of tokens
TokenFile= c:WorkDirPresentationsHANATranslator_0912tokenFile.txt
// Start using GUI
GUI=true
1.2 命令行參數(shù)
你可以在命令行中使用以下參數(shù)來覆蓋在配置文件中定義的參數(shù).如果不使用某個命令行參數(shù),系統(tǒng)將根據(jù)你在配置文件中為該參數(shù)定義的設(shè)置運行該工具.
Command-Line Parameters命令行參數(shù)
參數(shù) |
配置文件中等同于 |
描述 |
例如 |
f |
UserCaseFixer |
允許大小寫修復(fù)程序檢查輸入文件中包含的所有表是否在SAP HANA 數(shù)據(jù)庫中存在.默認值為”否”. |
-f |
s |
DBServer |
SAP HANA數(shù)據(jù)庫服務(wù)器的地址和端口號 |
-s 10.55.178.115:30915 |
d |
DBSchema |
SAP HANA 數(shù)據(jù)庫中的模式名稱 |
-d SBODEMOUS |
u |
DBUser |
用于登錄到SAP HANA 數(shù)據(jù)庫的用戶名 |
-u SYSTEM |
p |
DBPasswd |
用于登錄到SAP HANA 數(shù)據(jù)庫的用戶密碼 |
-p Manager111 |
c |
DisableComments |
從輸出文件中排除轉(zhuǎn)換注釋.默認值是”否”. 輸出文件中的轉(zhuǎn)換注釋說明哪些語句已經(jīng)轉(zhuǎn)換,哪些未轉(zhuǎn)換并提供原因. |
-c |
i |
InputFile |
輸入文件的路徑 |
-ic: HANATranslator_0912input.sql |
o |
OutputFile |
輸出文件的路徑 |
-o c: HANATranslator_0912output.sql |
F |
Formatter |
以干凈和專業(yè)化的SQL布局格式化輸出文件.默認值為”否”. |
-F |
t |
TokenFile |
令牌文件的路徑. |
-t c: HANATranslator_0912tokenFile.txt |
g |
GUI |
啟用SQL 轉(zhuǎn)換器的GUI模式.默認值為”是”. |
-g |
h |
幫助(不存在于文件中) |
顯示命令行參數(shù)的幫助 |
-h |
P |
創(chuàng)建過程(不存在于文件中) |
上下文相關(guān)性的查詢情況下啟用自動創(chuàng)建存儲過程.默認值為”否”. |
-P |
v |
版本(不存在于文件中) |
顯示工具的名稱和版本 |
-v |
1.3 使用非標(biāo)準(zhǔn)語法(令牌)轉(zhuǎn)換SQL
為了增加靈活性,SQL 通常使用令牌保存.當(dāng)你運行保存的SQL時,這些令牌會被其他SQL內(nèi)容替換.
先決條件
· 你已滿足使用SQL轉(zhuǎn)換器的所有先決條件.
· 你已經(jīng)定義了一個令牌文件來識別令牌.有關(guān)更多信息,請參閱令牌文件.
步驟
使用SQL轉(zhuǎn)換器來轉(zhuǎn)換包含令牌的SQL,按照使用SQL轉(zhuǎn)換器相同的步驟,但此外,還必須執(zhí)行以下操作之一:
· 在配置文件中定義令牌文件的路徑.有關(guān)詳細信息,請參閱配置文件.
· 如果使用命令行運行轉(zhuǎn)換器,則在使用轉(zhuǎn)換器時使用t參數(shù)定義令牌文件的路徑.有關(guān)更多信息,請參閱命令行參數(shù).
結(jié)果
定義的SQL從T-SQL 語法轉(zhuǎn)換為 ANSI-SQL語法.你可以對已轉(zhuǎn)換版本執(zhí)行檢查來確保根據(jù)你的需要結(jié)果是正確的.
例如
輸入文件如下:
select Column1, [%1], Column2 from TABLE1 where Column1 = [%3];
轉(zhuǎn)換后,輸出文件如下:
SELECT "Column1", [%1], "Column2" FROM TABLE1 WHERE "Column1" = [%3];
例如
輸入文件如下:
SELECT $[OTABLE.U_FIELD]+$[$38.U_Numeric.Field] FROM OTABLE WHERE [LastName] Like '%[%0]%' and [Time] = [%1];
轉(zhuǎn)換后,輸出文件如下:
SELECT $[OTABLE.U_FIELD] + $[$38.U_Numeric.Field] FROM OTABLE WHERE "LastName" LIKE '%[%0]%' AND "Time" = [%1];
1.3.1 令牌文件
你可以使用令牌文件來儲存令牌模式,以便在SQL中令牌可以被識別.模式可以定義為正則表達式,你也可以定義任何你想要的其他模式.
在下載的SQL轉(zhuǎn)換器.zip 文件中,TokenFile.txt 文件默認包含以下兩種模式:
VarToken=$[[$]*[0-9A-Z_a-z."]+]
VarToken=[%[0-9]+]
這兩個模式支持以下常見的參數(shù)樣式:
· [%1], [%2], ...., [%N]
· $[xxx],其中xxx 可以是字符,數(shù)字和點.
2 通過API 使用SQL轉(zhuǎn)換器
注意
使用API 的SQL轉(zhuǎn)換器僅在軟件解決方案遷移期間用于測試目的,因為其性能問題,而不能在實時系統(tǒng)中進行實時轉(zhuǎn)換.轉(zhuǎn)換過程是快速的,沒有任何顯著的延遲,但是在數(shù)據(jù)庫對象(例如列,過程等)名稱中大寫或小寫字母的驗證需要相當(dāng)多的時間.
你還可以通過擴展組件中的API訪問SQL轉(zhuǎn)換器函數(shù).這樣,你不需要手動將查詢收集到輸入文件中,然后運行命令行.相反,你可以在擴展組件中包含提供的API,并在使用附加組件時通過提供的API轉(zhuǎn)換查詢.
你可以在轉(zhuǎn)換器文件夾中找到使用轉(zhuǎn)換器作為鏈接庫的示例.示例位于名為[API_Example] 的文件夾中.有關(guān)更多信息,請參閱API示例.
先決條件
你的擴展組件中包含以下庫:
· Antlr3.Runtime.dll
· ConverterLib.dll
你可以在轉(zhuǎn)換器文件夾中找到這兩個庫.
步驟
1. 初始化SQL 轉(zhuǎn)換器.
轉(zhuǎn)換器的初始化實際上是轉(zhuǎn)換器對象的初始化.轉(zhuǎn)換器對象的初始化是通過對象的公共構(gòu)造函數(shù)完成的.該構(gòu)造需要配置文件的完整文件路徑來初始化轉(zhuǎn)換器.完整文件路徑表示文件路徑和文件名.配置文件和之前在配置文件中所述的相同,除了不使用輸入和輸出文件參數(shù).
句法
public TranslatorTool(string configPath)
例如
這個例子是在C#中.
TranslatorTool tool = new TranslatorTool(@"....Config.txt");
1. 轉(zhuǎn)換SQL 語句.
函數(shù)TranslatorTool::TranslateQuery 接受TSQL 字符串并返回到SQLScript中用戶已轉(zhuǎn)換的字符串.
句法
string TranslatorTool::TranslateQuery(string inputQuery, out int numOfStatement, out int numOfErrors)
例如
這個例子是在C#中.
int stmts, errs;
string result =
tool.TranslateQuery("select isnull(code, 0) from oinv;", out stmts, out errs);
2. 關(guān)閉SQL 轉(zhuǎn)換器.
轉(zhuǎn)換器的關(guān)閉包括對轉(zhuǎn)換器對象的釋放和關(guān)閉所分配的資源.
句法
void TranslatorTool::Close()
例如
這個例子是在C#中.
tool.Close();
2.1 API 示例
在轉(zhuǎn)換器文件夾中,你可以找到使用轉(zhuǎn)換器作為鏈接庫的示例.例子在名為[API_Example]的文件夾中.該文件夾包含一個小的Microsoft Visual Studio項目與鏈接的 SQL 轉(zhuǎn)換器庫和一個例子.你可以在Microsoft Visual Studio 中打開該文件夾并直接運行準(zhǔn)備的示例.
3 標(biāo)識符
在T-SQL 語法中,標(biāo)識符不區(qū)分大小寫字母,但是在ANSI-SQL 語法中,他們區(qū)分大小寫字母.當(dāng)你將SQL從MS SQL 服務(wù)器數(shù)據(jù)庫遷移到SAP HANA數(shù)據(jù)庫,你需要手動修復(fù)標(biāo)識符.轉(zhuǎn)換工具可以使用Use Case Fixer選項來驗證和修復(fù)此類標(biāo)識符問題. 當(dāng)你使用此選項時,根據(jù)SAP HANA 數(shù)據(jù)庫中現(xiàn)有數(shù)據(jù)庫對象,SQL中的標(biāo)識符將被更正,并且注釋也會顯示在輸出文件中.有關(guān)此選項的詳細信息,請參閱使用SQL轉(zhuǎn)換器.
注意
當(dāng)你使用Use Case Fixer選項時,你必須定義SAP HANA 數(shù)據(jù)庫的連接詳細信息.
例如
輸入文件如下:
select docnum, DOCNUM, DocNum, nonExistingColumn from oinv;
轉(zhuǎn)換后,輸出文件如下:
SELECT "DocNum", "DocNum", "DocNum", "nonExistingColumn" FROM OINV;
--[Note:CaseFixer] Column name docnum was changed to DocNum
--[Note:CaseFixer] Column name DOCNUM was changed to DocNum
--[Note:CaseFixer] Column nonExistingColumn not found in given tables
--[Note:CaseFixer] Table name oinv was changed to OINV
在SAP HANA 數(shù)據(jù)庫中,未加引號的標(biāo)識符被視為全大寫標(biāo)識符,所以你必須加引號來保存標(biāo)識符的大小寫. 轉(zhuǎn)換后,所有大寫標(biāo)識符不加引號.括號標(biāo)識符的括號被刪除,并且 [dbo]標(biāo)識符被刪除.
例如
輸入文件如下:
select MixedColumn, UCOLUMN, [BrackerColumn], "QuotedColumn", "UQUOTEDCOLUMN" from [dbo].TABLE1;
轉(zhuǎn)換后,輸出文件如下:
SELECT "MixedColumn", UCOLUMN, "BrackerColumn", "QuotedColumn", "UQUOTEDCOLUMN" FROM TABLE1;
4 支持的數(shù)據(jù)類型
下表顯示了SQL 轉(zhuǎn)換器支持的數(shù)據(jù)類型和在SAP HANA 數(shù)據(jù)庫中支持的相應(yīng)數(shù)據(jù)類型.
支持的數(shù)據(jù)類型
數(shù)據(jù)類型類別 |
在 MS SQL 服務(wù)器數(shù)據(jù)庫中的數(shù)據(jù)類型 |
在 SAP HANA 數(shù)據(jù)庫匯中的數(shù)據(jù)類型 |
Exact numerics |
bigint |
bigint |
bit |
tinyint |
|
decimal |
decimal |
|
int |
integer |
|
numeric |
decimal |
|
smallint |
smallint |
|
smallmoney |
smalldecimal |
|
money |
decimal |
|
tinyint |
tinyint |
|
Approximate numerics |
float |
float |
real |
real |
|
Date and time |
date |
date |
datetime2 |
timestamp |
|
datetime |
timestamp |
|
datetimeoffset |
SAP HANA 不支持此數(shù)據(jù)類型. |
|
smalldatetime |
seconddate |
|
time |
time |
|
Character strings |
char |
char |
varchar |
varchar |
|
text |
text |
|
Unicode character strings |
nchar |
nchar |
nvarchar |
nvarchar |
|
ntext |
nclob |
|
Binary strings |
binary |
binary |
varbinary |
varbinary |
|
image |
blob |
|
Other Data Types |
cursor |
SAP HANA 不支持此數(shù)據(jù)類型. |
timestamp |
timestamp |
|
hierarchyid |
SAP HANA 不支持此數(shù)據(jù)類型. |
|
uniqueidentifier |
nvarchar |
|
sql_variant |
SAP HANA 不支持此數(shù)據(jù)類型. |
|
xml |
SAP HANA 不支持此數(shù)據(jù)類型. |
|
table |
SAP HANA 不支持此數(shù)據(jù)類型. |
5 支持的運算符
下表顯示了SQL轉(zhuǎn)換器支持的運算符.
Supported Operators 支持的運算符
運算符類別 |
運算 |
算術(shù)運算符 |
+ (加法), - (減法), * (乘法), / (除法) |
字符串運算符 |
|| (級聯(lián)) |
比較運算符 |
=,>,<,>=,<=,<>, !=, !<, !> |
賦值運算符 |
= |
按位運算符 |
&, |, ^ |
設(shè)置運算符 |
union, union all, intersect, except |
邏輯運算符 |
and, or, not, all, any, between, exists, in, like, some, is null, is not null |
6 支持的表達式
SQL轉(zhuǎn)換器支持 case 表達式和聚合表達式.
7 支持的SQL 語句
7.1 支持的DML
下表顯示了SQL 轉(zhuǎn)換器支持的DML 及相關(guān)信息.
DML |
Related Information 相關(guān)信息 |
Select |
在MS SQL 服務(wù)器數(shù)據(jù)庫:http://msdn.microsoft.com/en-us/library/ms189499 在 SAP HANA 數(shù)據(jù)庫:http://help.sap.com/hana/html/sql_select.html |
Insert |
在MS SQL 服務(wù)器數(shù)據(jù)庫:http://msdn.microsoft.com/en-us/library/ms174335 在 SAP HANA 數(shù)據(jù)庫:http://help.sap.com/hana/html/sql_insert.html |
Update |
在MS SQL 服務(wù)器數(shù)據(jù)庫:http://msdn.microsoft.com/en-us/library/ms177523 在 SAP HANA 數(shù)據(jù)庫:http://help.sap.com/hana/html/sql_update.html |
Delete |
在MS SQL 服務(wù)器數(shù)據(jù)庫:http://msdn.microsoft.com/en-us/library/ms189835 在 SAP HANA 數(shù)據(jù)庫:http://help.sap.com/hana/html/sql_delete.html |
7.2 支持的DDL
下表顯示了SQL 轉(zhuǎn)換器支持的DLL 及相關(guān)信息.
7.3 支持的復(fù)雜語句
SAP HANA 要求你為復(fù)雜語句,即具有上下文相關(guān)性的語句,創(chuàng)建存儲過程.你可以使用命令行參數(shù)P在復(fù)雜語句的情況下自動創(chuàng)建存儲過程.如果你不使用這個參數(shù),那么這些復(fù)雜語句將轉(zhuǎn)換為單獨的語句,也就是說,它們不能被整合到存儲過程中.
支持的復(fù)雜語句有: While statement, If statement, Declare Variable/Cursor, 和 Create/Drop/Alter 過程.
注意
變量被轉(zhuǎn)換為純文本名稱.
8 支持的功能限制
8.1 連接字符串
在T-SQL語法中,運算符"+"用于連接字符串,但是在ANSI-SQL語法中,運算符"||" 用于連接字符串.在這兩種語法中,運算符"+"用于算術(shù)加法.
下表顯示了SQL 轉(zhuǎn)換器連接字符串所遵循的規(guī)則.
Rules for Concatenating Strings連接字符串規(guī)則
輸入文件中的表達式 |
輸出文件中的結(jié)果 |
number + number |
number + number |
number + string |
number + string |
string + string |
string || string |
All other expressions |
operand1 +operand2 |
8.2 轉(zhuǎn)換日期格式
T-SQL語法包含幾個日期格式,以下部分描述如何轉(zhuǎn)換這些日期格式.
8.2.1 使用 String 作為DATE 參數(shù)
在T-SQL 語法中,常用的格式為"YYYYMMDD" 被轉(zhuǎn)換為 "YYYY-MM-DD",如下所示:
'20010101 10:00:00.000' => '2001-01-01 10:00:00.000'
All functions in SQL Script support the translated format. SQL 腳本中的所有功能都支持已轉(zhuǎn)換的格式.
注意
用作日期的所有字符串最前面和最后空格被裁減,如下所示:
' 20010101 ' -> '2001-01-01'
8.2.2 使用整數(shù)值作為DATE參數(shù)
在T-SQL語法中,整數(shù)值被轉(zhuǎn)換為DATE, 如下所示:
0 = "1900-01-01"
1 = "1900-01-02"
在ANSI-SQL語法中,沒有從整數(shù)值到DATE 的隱式轉(zhuǎn)換格式.SQL轉(zhuǎn)換器轉(zhuǎn)換整數(shù)值使用在DATE參數(shù)過程中,如下所示:
Integer_Value => ADD_DAYS("1900-01-01 00:00:00.000, Integer_Value) 整數(shù)_值 => 增加_天數(shù)("1900-01-01 00:00:00.000, 整數(shù)_值)
TransInfo斯凱普斯是SAP制造業(yè)解決方案核心合作伙伴,SAP金牌實施商,專注上海/無錫/蘇州/廣州/深圳/東莞/成都等地SAP ERP軟件SAP制造業(yè)ERP軟件、 電子制造ERP、醫(yī)藥行業(yè)ERP、精細化工ERP、機械制造行業(yè)ERP實施服務(wù)。