Ошибка преобразования данных при вставке в новую таблицу из совместного оператора - PullRequest
0 голосов
/ 12 мая 2019

Я делаю простую вставку из объединения 4 таблиц. Когда я выбираю столбцы из объединения, они работают без проблем. Однако, когда я пытаюсь вставить в свою вновь созданную таблицу, я получаю следующее сообщение

"Преобразование не удалось при преобразовании значения varchar 'White' в тип данных int."

Скорее всего, это происходит из столбца "Race", который находится в таблице Dim_Borrower.

В Dim_Borrower. Колонка расы 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

Я застрял, попытался сбросить и воссоздать, проверил, чтобы столбец расы был varchar как в таблице назначения, так и в исходной таблице.

Ответы [ 2 ]

2 голосов
/ 12 мая 2019

Конечно, вы должны перечислить столбцы в вашем операторе SELECT в порядке списка столбцов INSERT.Но нет списка столбцов для вас, вставьте.Также вы можете использовать оператор 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
0 голосов
/ 12 мая 2019

Перечислите столбец явным образом при выполнении 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;

Обратите внимание, что я также изменил псевдонимы таблиц на значащие - сокращения для имен таблиц. Это облегчает понимание запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...