【发布时间】:2017-07-06 23:05:40
【问题描述】:
我使用的数据集可以在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?如果我没有那么多列,我会在插入工作表之前像这样更新原始表中的每一列:
UPDATE [RAW_demographics_20170706]
SET [fl_percent] = NULL
WHERE ISNUMERIC([fl_percent]) <> 1
我想知道是否有更有效的途径。
【问题讨论】:
标签: sql sql-server ssis