如何将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实施服务。