declare @info varchar(100),@age int,@name varchar(10),@addr varchar(50)
select convert(char(10),@age) 
set @age=20
select @name='张三',@addr='安徽省合肥市'
select @info=@age+@name+@addr
select @info as 结果
语法没有错,但是运行是显示
(所影响的行数为 1 行)服务器: 消息 245,级别 16,状态 1,行 5
将 varchar 值 '张三' 转换为数据类型为 int 的列时发生语法错误。

解决方案 »

  1.   


    declare @info varchar(100),@age int,@name varchar(10),@addr varchar(50)
    select convert(char(10),@age) 
    set @age=20
    select @name='张三',@addr='安徽省合肥市'
    select @info=CONVERT(VARCHAR,@age)+@name+@addr
    select @info as 结果
      

  2.   

    select @info=ltrim(@age)+@name+@addr
      

  3.   

    select @info=convert(char(3),@age)+@name+@addr
      

  4.   


    INT+char的時候,SQL會把char轉化成int型
      

  5.   

    declare @info varchar(100),@age int,@name varchar(10),@addr varchar(50)
    set @age=20
    select @name='张三',@addr='安徽省合肥市'
    select @info=CONVERT(CHAR(10),@age)+@name+@addr
    select @info as 结果
      

  6.   

    因为@age是int型的,所以用@age和@name去做加法会被当成两个int型的数据相加,所以就给@name做转化,然后就是转化失败的错误。对于数字和字符拼字符串的时候,常用的方法是给数字套用ltrim函数,将数字转换为字符。
      

  7.   

    declare @info varchar(100),@age int,@name varchar(10),@addr varchar(50)
    select convert(char(10),@age)
    set @age=20
    select @name='张三',@addr='安徽省合肥市' 
    select @info=quotename(@age,'''')+@name+@addr
    select @info as 结果