将varchar转换为int数据类型时转换失败

时间:2019-02-25 13:41:59

标签: sql sql-server stored-procedures

我有此查询,我需要将Pubname,ISBNname,copysname和createdname保存为Integers

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行   [Batch Start Line 2]转换varchar时转换失败   值“ 3”表示数据类型为int。

1 个答案:

答案 0 :(得分:0)

称为/jars的列实际上是伪装成整数的可能性很小。我的猜测是,您只需要引用表中的ID,但是您的问题没有足够的信息来知道这是否正确。

同时,您可以使用name

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) ,但是可以避免错误。