我做存储过程的时候,遇到这个问题“数据类型 varchar 和 uniqueidentifier 在 add 运算符中不兼容”实际例子如下:
declare @query varchar(300)
declare @id uniqueidentifierselect @id = id from tag where name = 'abc'set @query = 'select * from Shop where Id=''' +@Id+ ''''exec (@query)在set @query = 'select * from Shop where Id=''' +@Id+ '''' 这句就报错,请问怎样才能将uniqueidentifier值加到varchar上去呢?
不然我这东西没法做了谢谢!

解决方案 »

  1.   

    set @query = 'select * from Shop where Id=''' +cast(@Id as varchar(8000))+ '''' 
      

  2.   

    你要先理解uniqueidentifier的定义.
    uniqueidentifier
    全局唯一标识符 (GUID)。注释
    uniqueidentifier 数据类型的列或局部变量可用两种方法初始化为一个值: 使用 NEWID 函数。
    将字符串常量转换为如下形式(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字)。例如,6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 uniqueidentifier 值。 
    比较运算符可与 uniqueidentifier 值一起使用。然而,排列并非通过比较两个值的位模式来实现。允许对 uniqueidentifier 值执行的操作只有比较 (=, <>, <, >, <=, >=) 和检查 NULL(IS NULL 和 IS NOT NULL)。不允许使用其它算术运算符。所有的列约束及属性(IDENTITY 除外)均允许用于 uniqueidentifier 数据类型。 
      

  3.   

    你可以试试转换,长度自己定义.set @query = 'select * from Shop where Id=''' +cast(@Id as varchar(100))+ '''' 
      

  4.   

    set @query = 'select * from Shop where Id=''' +cast(@Id as varchar(100))+ '''' 
      

  5.   

    转化成varchar应该没问题。也可以用checksum()