我正在从4个表的联接中进行简单插入。 当我从联接中选择列时,它们将无缝工作。 但是,当我尝试将其插入到新创建的表中时,会收到以下消息
“将varchar值“ White”转换为数据类型int时转换失败。”
这很可能来自Dim_Borrower表中的“种族”列。
在Dim_Borrower中,race列是varchar(50) 我在新表中将Race列创建为varchar(50)。
试图了解我为什么会收到此错误以及如何解决该问题。
下面是我的查询
Create Table Param_Data(
LoanAmount int,
[Purpose of Loan] varchar (50),
PropertyUsage varchar (50),
MonthlyIncome int,
MaritalStatus varchar (50),
Race varchar (50),
Ethnicity varchar (50),
Sex varchar (50),
LoanDate datetime,
DOB datetime,
)
Insert into Param_Data
select a.LoanAmount,a.MonthlyIncome,c.[Property Usage], d.Race, d.Ethnicity,d.Sex, d.MaritalStatus, d.DOB, b.LoanDate, b.[Purpose of Loan]
FROM dbo.Fact_Financials a
LEFT JOIN dbo.Dim_Loan b
ON a.Loan_ID = b.Loan_ID
LEFT JOIN Dim_Property c
ON a.Property_ID = c.Property_ID
LEFT JOIN dbo.Dim_Borrower d
ON a.Borrower_ID = d.Borrower_ID
我在尝试拖放和重新创建时遇到了麻烦,请检查以确保目标表和原始表中的race列都是varchar。
答案 0 :(得分:2)
当然,您应该按INSERT列列表的顺序列出SELECT语句中的列。但是没有列列表可供您插入。 另外,您可以使用SELECT INTO语句,这样将自动创建表,并且不会出现这些问题
select a.LoanAmount
,a.MonthlyIncome
,c.[Property Usage]
, d.Race
, d.Ethnicity
,d.Sex
, d.MaritalStatus
, d.DOB
, b.LoanDate
, b.[Purpose of Loan]
INTO Param_data
FROM dbo.Fact_Financials a
LEFT JOIN dbo.Dim_Loan b
ON a.Loan_ID = b.Loan_ID
LEFT JOIN Dim_Property c
ON a.Property_ID = c.Property_ID
LEFT JOIN dbo.Dim_Borrower d
ON a.Borrower_ID = d.Borrower_ID
答案 1 :(得分:0)
在进行INSERT
时显式列出该列。然后确保列对齐! SQL使用INSERT
中列的位置,而不使用它们的名称。 (这可能是违反直觉的,因为SQL通常依赖名称而不是标识列的位置。)
您不排队:
INSERT into Param_Data (LoanAmount, [Purpose of Loan], PropertyUsage, MonthlyIncome,
MaritalStatus, Race, Ethnicity, Sex,
LoanDate, DOB
)
SELECT ff.LoanAmount, ff.MonthlyIncome,
p.[Property Usage], d.Race, d.Ethnicity, d.Sex, d.MaritalStatus, d.DOB,
l.LoanDate, l.[Purpose of Loan]
FROM dbo.Fact_Financials ff LEFT JOIN
dbo.Dim_Loan l
ON ff.Loan_ID = l.Loan_ID LEFT JOIN
Dim_Property p
ON ff.Property_ID = p.Property_ID LEFT JOIN
dbo.Dim_Borrower b
ON ff.Borrower_ID = b.Borrower_ID;
您需要重新排列列-我更愿意在SELECT
中而不是在INSERT
中重新排列它们:
INSERT into Param_Data (LoanAmount, [Purpose of Loan], PropertyUsage, MonthlyIncome,
MaritalStatus, Race, Ethnicity, Sex,
LoanDate, DOB
)
SELECT ff.LoanAmount, l.[Purpose of Loan], p.[Property Usage], ff.MonthlyIncome,
d.MaritalStatus, d.Race, d.Ethnicity, d.Sex,
l.LoanDate, d.DOB
FROM dbo.Fact_Financials ff LEFT JOIN
dbo.Dim_Loan l
ON ff.Loan_ID = l.Loan_ID LEFT JOIN
Dim_Property p
ON ff.Property_ID = p.Property_ID LEFT JOIN
dbo.Dim_Borrower b
ON ff.Borrower_ID = b.Borrower_ID;
请注意,我还将表别名更改为有意义的-表名的缩写。这使查询更易于理解。