sql - 将 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 时转换失败。
解决方案
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
如果无法转换值,这将返回- 但它避免了错误。
推荐阅读
- javascript - 使用 AngularJS 的 JsonPlaceHolder 多个 api 调用
- javascript - 我在这个带有数组的高阶函数中做错了什么?JS
- java - 在当前主题中找不到样式“navigationViewStyle”
- c++ - 为什么我不能在结构构造函数中分配 const int?
- sikuli - 如何在 Sikuli/Jython 中调用 OpenCV?
- python - 如何通过 Doc2Vec 找到文档中最具决定性的句子或单词?
- slim - 在 slim 中自动加载一个类的行为很奇怪
- python - 在 Python 中查询现有套接字的地址族
- php - 在动态菜单中回显 JOIN 查询 PHP
- c - qsort 一个指向结构指针数组的双指针