我正在使用的数据集here。
我正在使用SSIS将数据集上传到MS SQL Server。
我将所有内容都作为文本上传,并尝试通过从原始表中插入值来创建具有适当数据类型的工作表。
'
然而,我遇到的问题是对于没有值的单元格,有文本而不是空单元格。因此,隐式转换无法将数据转换为CREATE TABLE [WRK_demographics]
(
[RowNumber] INT IDENTITY(1,1)
,[DBN] VARCHAR(10)
,[Name] VARCHAR(1000)
,[schoolyear] VARCHAR(100)
,[fl_percent] FLOAT
,[frl_percent] FLOAT
,[total_enrollment] INT
,[grade9] INT
,[grade10] INT
,[grade11] INT
,[grade12] INT
,[ell_num] INT
,[ell_percent] FLOAT
,[sped_num] INT
,[sped_percent] FLOAT
,[ctt_num] INT
,[selfcontained_num] INT
,[asian_num] INT
,[asian_per] FLOAT
,[black_num] INT
,[black_per] FLOAT
,[hispanic_num] INT
,[hispanic_per] FLOAT
,[white_num] INT
,[white_per] FLOAT
,[male_num] INT
,[male_per] FLOAT
,[female_num] INT
,[female_per] FLOAT
)
INSERT INTO [WRK_demographics]
(
[DBN]
,[Name]
,[schoolyear]
,[fl_percent]
,[frl_percent]
,[total_enrollment]
,[grade9]
,[grade10]
,[grade11]
,[grade12]
,[ell_num]
,[ell_percent]
,[sped_num]
,[sped_percent]
,[ctt_num]
,[selfcontained_num]
,[asian_num]
,[asian_per]
,[black_num]
,[black_per]
,[hispanic_num]
,[hispanic_per]
,[white_num]
,[white_per]
,[male_num]
,[male_per]
,[female_num]
,[female_per]
)
SELECT
[DBN]
,[Name]
,[schoolyear]
,[fl_percent]
,[frl_percent]
,[total_enrollment]
,[grade9]
,[grade10]
,[grade11]
,[grade12]
,[ell_num]
,[ell_percent]
,[sped_num]
,[sped_percent]
,[ctt_num]
,[selfcontained_num]
,[asian_num]
,[asian_per]
,[black_num]
,[black_per]
,[hispanic_num]
,[hispanic_per]
,[white_num]
,[white_per]
,[male_num]
,[male_per]
,[female_num]
,[female_per]
FROM [RAW_demographics_20170706]
。有没有办法可以修改int/float
语句来将非数字单元格的值更新为SELECT
?如果我没有这么多列,我会在插入工作表之前更新原始表中的每一列:
NULL
我想知道是否有更有效的途径。
答案 0 :(得分:2)
您想要使用案例陈述,因为您的错误应来自空字符串而非实际NULL
SELECT
[DBN]
,[Name]
,[schoolyear]
,case when [fl_percent] = '' then 0.0 else fl_percent end
,case when [frl_percent] = '' then 0.0 else flr_percent end
...
...
,case when [grade12] = '' then 0 else grade12 end
...
FROM [RAW_demographics_20170706]
我也不会在这种情况下使用ISNUMERIC
。它会导致问题,因为它对除int或float之外的其他情况的数组返回true。
这些返回true,但转换失败:
select isnumeric('$')
select isnumeric('1e4')
etc...
答案 1 :(得分:1)
这就是TRY_CAST的用途:“如果转换成功,则返回转换为指定数据类型的值;否则返回null。”