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