首页 > 解决方案 > 将 varchar 转换为数据类型 int 时转换失败

问题描述

我有这个查询,我需要将 Pubname、ISBNname、copyname 和 createdname 保存为整数

DECLARE @a Table(bkID INT, bkname varchar(100), bkpub INT, bkISBN INT, bkcopies INT, bkcreatedby INT)
        INSERT INTO @a (bkID, bkname, bkpub, bkISBN, bkcopies, bkcreatedby)
        SELECT A.nameID,
        A.bkname,           
        CAST((B.Pubname) AS INT),
        CAST((C.ISBNname) AS int),
        CAST((D.copiesname) AS int),
        CAST((F.createdname) AS int)
        FROM @bkname AS A
        LEFT JOIN @bkPub AS B
        ON (A.nameID = PubID)
        LEFT JOIN @bkISBN AS C
        ON (A.nameID = C.ISBNID)
        LEFT JOIN @bkcopies AS D
        ON (A.nameID = D.copiesID)
        LEFT JOIN @bkcraeted AS F
        ON (A.nameID = F.craetedID)

它返回此错误:

消息 245,级别 16,状态 1,过程 LR_InsertBookArray,第 46 行 [批处理开始第 2 行] 将 varchar 值“3”转换为数据类型 int 时转换失败。

标签: sqlsql-serverstored-procedures

解决方案


name被调用的列实际上是伪装的整数似乎极不可能。我的猜测是您只是想要参考表中的 id,但您的问题没有足够的信息来知道这是否属实。

同时,您可以使用TRY_CAST()

    TRY_CAST(B.Pubname AS int),
    TRY_CAST(C.ISBNname AS int),
    TRY_CAST(D.copiesname AS int),
    TRY_CAST(F.createdname AS int)

NULL如果无法转换值,这将返回- 但它避免了错误。


推荐阅读