set @RoleQuery='AND (CardDetails.UserId in 
(SELECT DISTINCT UserId FROM DealerTypeInfo WHERE PK_Shipper='''+@PK_Shipper+'''))'如果@PK_Shipper是nvarchar类型,语句没问题
如果@PK_Shipper是int类型的话就会报错
在将 varchar 值 'AND (CardDetails.UserId in (SELECT DISTINCT UserId FROM DealerTypeInfo WHERE PK_Shipper='' 转换成数据类型 int 时失败。
请问如果是INT的话该怎么写

解决方案 »

  1.   

    set @RoleQuery='AND (CardDetails.UserId in 
                        (SELECT DISTINCT UserId FROM DealerTypeInfo WHERE PK_Shipper='''+rtrim(@PK_Shipper)+'''))'
      

  2.   

    cast(@PK_Shipper as nvarchar)试试先
      

  3.   

    set @RoleQuery='AND (CardDetails.UserId in (SELECT DISTINCT UserId FROM DealerTypeInfo WHERE PK_Shipper='''+rtrim(@PK_Shipper)+'''))'
      

  4.   

    cast(nvarchar,@PK_Shipper)试试先
    我是菜鸟
      

  5.   

    拼接动态语句的时候
    要将INT类型的变量 换成字符型拼接
      

  6.   


    改成这个试试
     set @RoleQuery='AND (CardDetails.UserId in 
                        (SELECT DISTINCT UserId FROM DealerTypeInfo WHERE PK_Shipper='''+ltrim(@PK_Shipper)+'''))'
      

  7.   

    哦,应该convert()才是那样的。
    啊!!:(
      

  8.   

    exec('AND (CardDetails.UserId in 
                        (SELECT DISTINCT UserId FROM DealerTypeInfo WHERE PK_Shipper='''+@PK_Shipper+'''))')
    --这个是不用变量的方法
      

  9.   

    sql code 经过sql server 2000验证 无误declare @PK_Shipper int
    declare @RoleQuery nvarchar
    set @RoleQuery='AND (CardDetails.UserId in 
                        (SELECT DISTINCT UserId FROM DealerTypeInfo WHERE PK_Shipper=''+@PK_Shipper+''))'