创建日期键时遇转换错误:nvarchar值转int数据类型失败
问题分析与解决
错误提示将nvarchar值'1/1/2016'转换为int数据类型时失败的核心原因:
- 目标表
[INT].[Budget]的DATEKEY字段为INT类型,但你生成的是NVARCHAR类型的日期字符串,数据库隐式转换字符串为整数时失败; - 源表
[STG].[CSV_budget]的[Date]是字符串类型,直接用CONVERT(NVARCHAR(8), [Date], 112)无法正确解析日期格式,最终产出的还是带分隔符的字符串,无法转成整数。
修正后的SQL代码
INSERT INTO [INT].[Budget] ([Date], [Sales], [Margin], DATEKEY, Storekey) SELECT Budget.[Date], Budget.[Sales], Budget.[Margin], -- 先将字符串日期转为DATE类型,再生成INT格式的日期键(如20160101) CONVERT(INT, CONVERT(NVARCHAR(8), TRY_CAST(Budget.[Date] AS DATE), 112)), Stores.Storekey FROM [STG].[CSV_budget] Budget -- 必须补充Stores表的关联逻辑,替换为实际业务的JOIN条件 JOIN [你的架构].[Stores] Stores ON Budget.StoreID = Stores.StoreID
关键注意事项
- 用
TRY_CAST替代CAST:避免单个日期格式错误导致整个插入任务失败,转换失败的行DATEKEY会返回NULL; - 插入列列表规范:目标表的列不需要加表前缀,只需写列名即可;
- 补全JOIN逻辑:原SQL未关联Stores表,执行时会因找不到该表而报错,必须补充符合业务逻辑的关联条件。
内容的提问来源于stack exchange,提问作者Arwa Musallam
相关产品推荐
相关产品推荐

