【发布时间】:2016-12-03 17:38:53
【问题描述】:
以前我使用的是自动生成的临时表,但在一种情况下我遇到了这个错误:
nvarchar 值 '182681000422' 的转换溢出了一个 int 列
所以我创建了一个临时表,并像这样手动定义了每一列
Begin
Drop Table #tmpSTDistData
End
create table #tmpSTDistData
(
DistRawProdIdentifier Varchar(50)
)
如果表1中RawProductIdentifier(数据类型int)的值为NULL,它将从表2中获取,其值为TranslationCriteria2(此处为数据类型varchar)。我仍然遇到同样的错误。
INSERT INTO #tmpSTDistData
SELECT
DistRawProdIdentifier = (CASE ISNULL(dist.RawProductIdentifier, 0)
WHEN 0
THEN CAST(tm.TranslationCriteria2 as NVARCHAR(50))
ELSE 0
END)
【问题讨论】:
-
CASE表达式有问题:CASE的所有路径都必须返回 same datatype ,因为你没有这样做(一旦返回int,一次是nvarchar(50)),则 SQL Server 会将其中一个返回值转换为具有更高优先级的数据类型。由于int的优先级高于nvarchar,因此具有超长值的nvarchar字符串将转换为int- 并在此过程中失败。 -
我使用的是sql server
标签: sql sql-server database