通过SSMA将Oracle中的Raw [16](Guid)转换为SQL Server中的uniqueidentifier

时间:2019-04-20 06:14:04

标签: sql-server oracle guid uniqueidentifier sql-server-migration-assi

我已经解决了需要将数据从Oracle数据库转换为SQL Server数据库的问题,除了SQL Server迁移助手,别无其他方法。

SSMA中有一个TypeMapping,可让您定义要转换的类型。我以TypeMapping的形式将Raw [16](Oracle中的Guid)添加到UniqueIdentifier(Oracle中的Guid)。

但是,当SSMA开始转换数据时,它将返回此异常:

  

来自数据源的Byte []类型的给定值不能为   转换为指定目标列的类型uniqueidentifier。

3 个答案:

答案 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