在数据映射中将UNIQUEIDENTFIER值与可能的varchar分开

时间:2019-03-13 13:50:54

标签: sql sql-server

我很难区分数据映射脚本中的“ UNIQUEIDENTIFIER”和“ varchar”。数据不匹配。

到目前为止,我已经尝试过:

--my_field is a UNIQUEIDENTFIER

    SELECT distinct my_field, len(my_field), count(my_field) 
    FROM my_table_ 
    WHERE len(my_field) < 36 OR len(my_field) > 36 
    group by my_field

    SELECT my_field, len(my_field) 
    FROM my_table_ 
    WHERE my_field LIKE '%[!#%&+,./:;<=>@`{|}~"()*\\\_\^\?\[\]\'']%' {ESCAPE '\'}

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

假设您的SQL Server版本是2012或更高版本(如果没有,则应该升级,因为2012是Microsoft仍支持的最早版本)-您可以使用try_cast-如果进行强制转换,它将返回null失败:

样本数据:

DECLARE @T AS TABLE
(
    my_field varchar(100)
)

INSERT INTO @T (my_field) VALUES
('608DC3C3-1B2E-47AA-9362-33CD76DA3F6A'), ('A3871EA9-172D-49DD-8874-A850857F01FB'),
('A3871EA9-THIS-IS-WRONG-A850857F01FB'), ('And so is this')

查询:

SELECT my_field
FROM @T
WHERE TRY_CAST(my_Field AS UNIQUEIDENTIFIER) IS NULL

结果:

my_field
A3871EA9-THIS-IS-WRONG-A850857F01FB
And so is this