由于我当前项目中的一个相当出色的疏忽,我们将一些guids存储在一个表的varchar列中,这些guids需要与另一个表中的唯一标识符列进行比较。
我该怎么做呢?SQL server简单地说它不能从字符串转换为唯一标识符。
发布于 2009-08-10 18:23:47
如果SQL报告无法强制转换,这意味着您不仅将唯一标识符存储为varchar,而且还使用了与SQL Server不同的格式(例如,您添加了'{‘和'}')。当正确格式化时,SQL完全能够将字符串转换为唯一标识符:
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格式(no {})。
发布于 2009-08-10 18:20:44
将唯一标识符转换为varchar:
CAST( uniqueidentifier_col_name as varchar)发布于 2009-08-10 18:29:24
我刚刚编写了以下测试脚本:
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'在SSMS窗口中运行或通过slqcmd文件运行,结果是相同的-i (2005)执行隐式转换。这支持了我在几年前遇到类似问题时对SQL2000的回忆。
关键是varchar字符串必须与guid模式匹配:
十六进制digits
https://stackoverflow.com/questions/1256380
复制相似问题