免费服务热线:400-016-7107
在线客服为您服务

免费服务热线

400-016-7107

工作时间

周一至周五 9:00-18:00

(12:00-13:30及法定假日除外)

如何将SQL 从Microsoft SQL Server 数据库转换到SAP HANA数据库

时间:2018-09-17
分享到 :

如何将SQL 从Microsoft SQL Server 数据库转换到SAP HANA数据库


使用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 选择F5键盘按钮.

在输入文件或输入框中SQL已被转换,同时转换报窗口弹出.

你可以在输出框中找到已经转换的SQL.

8. 要将已转换的SQL保存到输出文件,请选择输出文件字段旁边的(保存)图标.

结果

定义的SQLT-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参数定义令牌文件的路径.有关更多信息,请参阅命令行参数.

结果

定义的SQLT-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 可以是字符,数字和点.

通过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 语法中,他们区分大小写字母.当你将SQLMS 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 表达式和聚合表达式.

支持的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 及相关信息.

 

DDL

相关信息

创建表

In the MS SQL服务器数据库:http://msdn.microsoft.com/en-us/library/ms174979

In the SAP HANA 数据库:http://help.sap.com/hana/html/sql_create_table.html

创建索引

In the MS SQL服务器数据库:http://msdn.microsoft.com/en-us/library/ms188783

In the SAP HANA 数据库:http://help.sap.com/hana/html/sql_create_index.html

创建视图

In the MS SQL服务器数据库:http://msdn.microsoft.com/en-us/library/ms187956

In the SAP HANA 数据库:http://help.sap.com/hana/html/sql_create_view.html

更改表

In the MS SQL服务器数据库:http://msdn.microsoft.com/en-us/library/ms190273

In the SAP HANA 数据库:http://help.sap.com/hana/html/sql_alter_table.html

更改索引

In the MS SQL服务器数据库:http://msdn.microsoft.com/en-us/library/ms188388

In the SAP HANA 数据库:http://help.sap.com/hana/html/sql_alter_index.html

删除表

In the MS SQL服务器数据库:http://msdn.microsoft.com/en-us/library/ms173790

In the SAP HANA 数据库:http://help.sap.com/hana/html/sql_drop_table.html

删除索引

In the MS SQL服务器数据库:http://msdn.microsoft.com/en-us/library/ms176118

In the SAP HANA 数据库:http://help.sap.com/hana/html/sql_drop_index.html

删除视图

In the MS SQL服务器数据库:http://msdn.microsoft.com/en-us/library/ms173492

In the SAP HANA 数据库:http://help.sap.com/hana/html/sql_drop_view.html

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实施服务