我已经解决了需要将数据从Oracle
数据库转换为SQL Server
数据库的问题,除了SQL Server迁移助手,别无其他方法。
在SSMA
中有一个TypeMapping
,可让您定义要转换的类型。我以TypeMapping
的形式将Raw [16](Oracle中的Guid)添加到UniqueIdentifier(Oracle中的Guid)。
但是,当SSMA开始转换数据时,它将返回此异常:
来自数据源的Byte []类型的给定值不能为 转换为指定目标列的类型uniqueidentifier。
答案 0 :(得分:0)
ORACLE SYS_GUID是RAW(16),它是32个字符的十六进制表示形式。
等效的SQL Server数据类型Uniqueidentifier是16字节的二进制值,它是36个字符的表示形式。 SQL Server UniqueIdentifier
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,其中每个x是一个十六进制 0-9或a-f范围内的数字。例如, 6F9619FF-8B86-D011-B42D-00C04FC964FF是有效的唯一标识符值
您可以想到以下选项:
我建议您在类型映射中使用VARCHAR(32)表示SQLServer中相应的ORACLE GUID。
您可以为目标列设置NEWID()的默认值,加载数据时将分配值
VARCHAR(36)
,一旦完成迁移,就可以开始将NEWID()用于将来的值。由于GUID将是唯一的,因此您不会遇到问题。 答案 1 :(得分:0)
DECLARE @uniqORAconvMS varchar(32) = '5cf5d1b5db12d38067affb261d9619dc'
SELECT left(@uniqORAconvMS,8) + '-' + SUBSTRING(@uniqORAconvMS,9,4) + '-' + SUBSTRING(@uniqORAconvMS,13,4) + '-' + SUBSTRING(@uniqORAconvMS,17,4) + '-' + RIGHT(@uniqORAconvMS,12)
-- xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
-- 5cf5d1b5-db12-d380-67af-fb261d9619dc
-- With TRY_CONVERT to check valid uniqueidentifier
SELECT TRY_CONVERT (UNIQUEIDENTIFIER, LEFT(@uniqORAconvMS,8) + '-' + SUBSTRING(@uniqORAconvMS,9,4) + '-' + SUBSTRING(@uniqORAconvMS,13,4) + '-' + SUBSTRING(@uniqORAconvMS,17,4) + '-' + RIGHT(@uniqORAconvMS,12))
答案 2 :(得分:0)
马丁的回答有点不正确。如果使用实体框架,您会注意到从oracle返回的GUID不仅被破折号分开,而且还被重新排序。因此,ui = fluidPage(
theme = shinytheme("cerulean"),
navbarPage("App Name", selected = "Tab1",
id = "navbar",
position = "fixed-top",
tabPanel("Tab1", id = "tab1Id",
#padding between navbar and page when using fixed-top
tags$style(type="text/css", "body {padding-top: 70px;}"),
fluidPage(
actionBttn('insertBtn1',
'Add variable',
style = "simple",
color = "primary",
icon=icon("floppy-o"),
size = "sm",
block = FALSE,
no_outline = TRUE
),
actionButton("saveBtn2", "Update Schedule",
icon("floppy-o"),
#style="color: #0000ff;border-color: #2e6da4; background-color: #0000ff"
style = "background-color: #e7e7e7; color: black"
)
)
)
)
)
server = function(input, output, session) {}
runApp(shinyApp(ui, server))
应该成为5cf5d1b5db12d38067affb261d9619dc
,而不是b5d1f55c-12db-80d3-67af-fb261d9619dc
。
5cf5d1b5-db12-d380-67af-fb261d9619dc