由于我当前项目中的一些疏忽,在一个表中将一些GUID存储在VARCHAR列中,需要与另一个表中的UNIQUEIDENTIFIER列进行比较。如何才能实现这一点?SQL Server只提示无法从字符字符串转换为Uniqueidentifier。
如果SQL无法进行强制类型转换,这意味着不仅你将uniqueidentifier存储为varchar,而且你使用的格式与SQL Server不同(例如,你添加了“{”和“}”)。当格式正确时,SQL完全能够将字符串转换为uniqueidentifier:
declare @u uniqueidentifier;
declare @s varchar(64);
select @u = NEWID();
select @s = CAST(@u as varchar(64));
select CAST(@s as uniqueidentifier), @u, @s;
根据你实际存储唯一标识符的方式,很可能需要修改数据和代码以匹配SQL格式(无{})。
将唯一标识符转换为 varchar:
CAST( uniqueidentifier_col_name as varchar)
我刚刚编写了以下测试脚本:
DECLARE
@Foo Uniqueidentifier
,@Foo2 varchar(50)
SET @Foo = newid()
SET @Foo2 = newId()
print @Foo
print @Foo2
if @Foo = @Foo2
print 'Yes'
else
print 'No'
set @Foo = @Foo2
if @Foo = @Foo2
print 'Yes'
else
print 'No'
你需要将另一个唯一标识符转换为 varchar。
SQL Server 可能会尝试将像 "bob" 这样的内容转换为唯一标识符,但失败了。 根据 CAST/CONVERT,这是允许的,所以问题可能出在 varchar 列中的值。