sql server中 int转varchar的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql server中 int转varchar的方法相关的知识,希望对你有一定的参考价值。

declare @hao varchar(50);
set @hao='01015000001';
declare @P varchar(50);
set @P='P';
select @hao
select * from PDM_DOCID where CSYMBOL in (@P+@hao)
/*set @hao=convert(int,@hao)*/
select @hao
declare @has varchar(50)
set @has=convert(varchar,@hao)
select @has
select * from PDM_DOCID where CSYMBOL in (@P+@has);

只要注销掉varchar转int的语句,后面的select就可以正常的得出结果。也就是说int在后面的convert语句中没有转成varchar格式。同时我也用过了cast 都不可以完成int 转为varchar的操作。我想知道怎么实现int转varchar来完成这个select语句

参考技术A 没必要转来转去的啊,int的优先级比varchar的高
做+运算时类型会发生隐式转化,由低向高
也就是select '12'+1 的结果是13,没必要显示转换追问

但是我想把int再转回varchar呀 我想做循环 我得到了01015000002这个结果 但是我没法select查询P01015000002在表的记录了

追答

你的变量@hao本身就是varchar类型,转换只是中间操作
最终@hao的类型仍然是varchar
set @hao=@hao+1如此操作最终仍然是字符的01015000002
难道你select @hao的时候不是吗,如果是数字的话,前面是没有0占位的

追问

我看了看 前面没有0了 是101500002 不是varchar型了,我该怎么办

追答

啊。。对了,忘了一步,@hao=@hao+1时由于要中间转换成int,所以前面的0自动去掉了
那给你个方案吧,假设你的@hao是固定11位
set @hao=@hao+1

set @hao=right('00000000000'+@hao,11)
这样做一个前置补0操作

追问

谢啦 搞定了

本回答被提问者采纳
参考技术B set @hao=cast(@hao as varchar(100))

你这个都已经定义成varchar了,使用过程中不需要转换的。 你把convert这些去掉,会出错吗?追问

select * from PDM_DOCID where CSYMBOL in (@P+@hao)
set @hao=@hao+1
select @hao
select * from PDM_DOCID where CSYMBOL in (@P+@hao);
直接看这段第一个是我需要的查询结果 第二个是01015000002 第三个是空白 我怎么能让第三个查询的结果是P01015000002这条信息

追答declare @hao int
declare @varhao varchar(1000)
set @hao=1
declare @P varchar(50)
set @P='P01015'

set @varhao = @P + right('000000' + cast( @hao as varchar(10)),6)
select @varhao
set @hao = @hao + 1

set @varhao = @P + right('000000' + cast( @hao as varchar(10)),6)
select @varhao

看一下这个,你参考一下。因为你原来的有01015000002,转成INT时,可能超出了。所以相加出错了吧。

Qt调用Server SQL中的存储过程

Server SQL中的存储过程如下:

CREATE procedure PINSERTPC
 @pcnum int,
 @pcname varchar(50),
 @pctype int,
 @ipaddress varchar(50),
 @port  int,
 @pcid  int output
as

--declare @pcid int
if exists (select * from COMPUTERTABLE where PcNum = @pcnum)
 set @pcid = -1
else
begin
 insert into COMPUTERTABLE (PcNum, PcName, PcType, IpAddress, Port) 
 values (@pcnum, @pcname, @pctype, @ipaddress, @port)
 select @pcid = SCOPE_IDENTITY()
end
--return @pcid
GO

根据网上搜索文章《qt中调用sql server的存储过程》内容如下:

写了个存储过程,准备使用qt调用,数据库是sqlserver 2000按照参考文档
调用是下面这样的

QSqlQuery query;
query.prepare("CALL InsertImgEntity( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
query.bindValue(0,datano);
query.bindValue(1,DataCorner);
query.bindValue(2,DataZD);
query.bindValue(3,DataCommon);
query.bindValue(4,ImgCode);
query.bindValue(5,ImgCodeZ);
query.bindValue(6,"png");
query.bindValue(7,pngImage,QSql::Binary);
query.bindValue(8,"GoldMap Gaoyong Sun");
query.bindValue(9,QDateTime::currentDateTime ());

但是我在windows下却无法调用成功。调试跟踪,发觉我在调试中存储过程是通过exec调用的,故此将代码修改如下,问题解决,造成这种结果的原因可能是数据库的不同吧。

query.prepare("exec InsertImgEntity ?, ?, ?, ?, ?, ?, ?, ?, ?, ?");
query.bindValue(0,datano);
query.bindValue(1,DataCorner);
query.bindValue(2,DataZD);
query.bindValue(3,DataCommon);
query.bindValue(4,ImgCode);
query.bindValue(5,ImgCodeZ);
query.bindValue(6,"png");
query.bindValue(7,pngImage,QSql::Binary);
query.bindValue(8,"GoldMap Gaoyong Sun");
query.bindValue(9,QDateTime::currentDateTime ());


可是工作需要,存储过程中要有返回值,或者输出参数,返回当前插入的ID号。通过测试得到解决方法。以最上方存储过程为例Qt中代码如下:

bool QtSqlServer::SqlInsertPcData(QtPcData* pcData)
{
    bool bFlag = false;
 
    QSqlQuery query;
    query.prepare("exec PINSERTPC ?, ?, ?, ?, ?, ? output");
    query.bindValue(0, pcData->GetPcNum());
    query.bindValue(1, pcData->GetPcName());
    query.bindValue(2, pcData->GetPcType());
    query.bindValue(3, pcData->GetIpAddress());
    query.bindValue(4, pcData->GetPort());
    query.bindValue(5, 0, QSql::Out);
    bFlag = query.exec();
    if (bFlag)
    {
        int pcID = query.boundValue(5).toInt();
        if (pcID < 0)
        {
            bFlag = false;
        }
        else
        {
            pcData->SetPcID(pcID);
            bFlag = true;
        }
    }
    else
    {
        QString str = query.lastError().text();
        QMessageBox::critical(0, QObject::tr("Error"),QObject::tr("%1").arg(str));
    }

    return bFlag;
}

也存在一些未知的疑问……这里的输出参数必须设置在存储过程的最后一个参数中返回,而且根据Server SQL中的要求必须有output的修饰,这样才可确保成功。

疑问1:如果存储过程想以返回值的形式返回,使用Qt如何调用。
疑问2:为何存储过程的输出参数必须设置才最后一个参数才可获取到正确的输出值,譬如想在第一个参数中返回,如何解决。
疑问3:有些存储过程有多个输出参数,但本人测试Qt只能以一个输出参数形式(设置为最后一个参数)调用……这事让我着实头疼!整的我其他的输出参数是在执着SQL语句查出来……

最近貌似挺贪玩....要收敛收敛了!嘿嘿!上述问题如果有人可以解答,小的十分感激,彼此交流,相互学习!

http://cool.worm.blog.163.com/blog/static/6433900620091018103220702/

以上是关于sql server中 int转varchar的方法的主要内容,如果未能解决你的问题,请参考以下文章

SQL SERVER中某个字段属性为varchar,我想把这个字段改成int型,如何操作?

SQL SERVER中某个字段属性为varchar,我想把这个字段改成int型

在SQL Server触发器中转换(varchar到int)

在 SQL Server 存储过程中将 varchar 转换为 int 时出错

SQL Server 认为我在使用连字符时尝试将 varchar 转换为 int

sql server 主键与外键约束无法创建