SQL Server 2005 Issue Имя столбца или количество предоставленных значений не соответствует определению таблицы - PullRequest
1 голос
/ 16 марта 2010

Я хочу УДАЛИТЬ данные из таблицы перед выполнением INSERT INTO, однако я продолжаю получать сообщение об ошибке:

Ошибка вставки: имя столбца или количество предоставленных значений не соответствует определению таблицы.

Я также попытался определить столбцы, в которые должны вводиться данные, как часть оператора INSERT INTO, но затем возникли проблемы с именами столбцов, даже если они правильные. У меня такое чувство, что проблемы связаны с тем, что я выбрал 2 записи PostCode и преобразовал их в 1, но если кто-то сможет пролить свет на это, это будет очень полезно.

Мой код можно найти ниже, если вы хотите, чтобы я добавил код, в котором я разделял имена столбцов, дайте мне знать. Таким образом, вы знаете, что выбранные поля - это все поля в таблице курса, кроме AutoNum, который является первичным ключом автоматического номера, и SSMA_TimeStamp, который является меткой времени.

BEGIN

DELETE dbo.Course

INSERT INTO dbo.Course

SELECT 
    RTRIM( CAST (sd.[RefNo] AS nvarchar(50))) AS 'Student Ref No',
    sd.[FirstForeName] AS Forename,
    sd.[Surname],
    sd.[Address1],
    sd.[Address2],
    sd.[Address3],
    sd.[Address4],
    sd.[DateOfBirth] AS DOB,
    sd.[PostCodeOut] + ' ' + sd.[PostCodeIn] AS 'Post Code',
    o.[Name] AS 'Course Name',
    o.[Code] As 'Course Code',
    e.[StartDate] AS 'Start Date',
    e.[ExpectedGLH] AS 'Exp GLH',
    e.[ExpectedEndDate] AS 'Expected End Date',
    e.[ActualEndDate] AS 'Actual End Date',
    e.[Grade] AS 'Grade',
    ou.[Description] AS Outcome,
    cs.[Description] AS 'Completion Status',
    sd.[Tel1] AS 'Tel 1'

  FROM [xxxxxxx].[xxxxxx].[dbo].[StudentDetail] sd
  INNER JOIN [xxxxxxx].[xxxxxx].[dbo].[Enrolment] e
  ON sd.[StudentDetailID] = e.[StudentDetailID]
  Inner JOIN [xxxxxxx].[xxxxxx].[dbo].[Offering] o
  ON o.[OfferingID] = e.[OfferingID]
  INNER JOIN [xxxxxxx].[xxxxxx].[dbo].[CompletionStatus] cs
  ON cs.[CompletionStatusID] = e.[CompletionStatusID]
  INNER JOIN [xxxxxxx].[xxxxxx].[dbo].[Outcome] ou
  ON ou.[OutcomeID] = e.[OutcomeID]
  WHERE sd.[AcademicYearID] = '09/10'
  AND
  o.[Code]  LIKE '%-ee%'
  AND
  o.[Name]  LIKE '%-%dl%'
  ORDER BY
  sd.[RefNo]

Ответы [ 4 ]

1 голос
/ 16 марта 2010

Похоже, что ваша таблица 'Course' не соответствует вашей инструкции вставки, ни по количеству, ни по названию указанных столбцов (согласно сообщению об ошибке).

Не могли бы вы добавить код создания таблицы для таблицы «Курс», так как это покажет, где лежит несоответствие.

Спасибо.

1 голос
/ 16 марта 2010

Я бы явно перечислил столбцы в таблице курса, в которую вы вставляете - это может решить вашу проблему / помочь найти вашу проблему, но также уменьшит проблемы с обслуживанием в будущем.

0 голосов
/ 16 марта 2010

Вы должны добавить список столбцов в оператор INSERT, см. Ниже, где вы явно перечислите каждый столбец из dbo.Course, который вы намереваетесь заполнить в вашем INSERT:

INSERT INTO dbo.Course
                                        ---<<<<<
    (col1, col2, col3, col4, clo5....)  ---<<<<<Add this here
                                        ---<<<<<
SELECT 
    RTRIM( CAST (sd.[RefNo] AS nvarchar(50))) AS 'Student Ref No',
    sd.[FirstForeName] AS Forename,
    sd.[Surname],
    sd.[Address1],
    sd.[Address2],
    sd.[Address3],
    sd.[Address4],
    sd.[DateOfBirth] AS DOB,
    sd.[PostCodeOut] + ' ' + sd.[PostCodeIn] AS 'Post Code',
    o.[Name] AS 'Course Name',
    o.[Code] As 'Course Code',
    e.[StartDate] AS 'Start Date',
    e.[ExpectedGLH] AS 'Exp GLH',
    e.[ExpectedEndDate] AS 'Expected End Date',
    e.[ActualEndDate] AS 'Actual End Date',
    e.[Grade] AS 'Grade',
    ou.[Description] AS Outcome,
    cs.[Description] AS 'Completion Status',
    sd.[Tel1] AS 'Tel 1'

  FROM ....

затем убедитесь, что каждый столбец в списке SELECT соответствует каждому из этих столбцов и по порядку. Судя по вашей ошибке, в SELECT.

слишком много или слишком мало возвращаемых столбцов.
0 голосов
/ 16 марта 2010

Чтобы решить эту проблему, вам нужно явно указать список столбцов таблицы в операторе INSERT INTO.

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