2016-11-14 3 views
0

Я использую проект базы данных Visual Studio 2015, чтобы попытаться вставить строки в таблицы базы данных, которые были созданы проектом. Вставка sql работает в той же таблице в SSMS, но не при запуске через проект.Почему этот оператор вставки не соответствует таблице?

я получаю ошибку: Column name or number of supplied values does not match the table definition.

TSQL вставки сценария:

if not exists (select top 1 1 from [dbo].[PricingGroupTypes]) begin 
    INSERT INTO [dbo].[PricingGroupTypes] 
       ([Name]) 
     VALUES 
       ('User') 
       ,('Product Format') 
    print 'Pricing Group Types added' 
end 

Определение таблицы (в проекте DB):

CREATE TABLE [dbo].[PricingGroupTypes] (
    [Id] INT   IDENTITY (1, 1) NOT NULL, 
    [Name] NVARCHAR (250) NOT NULL, 
    CONSTRAINT [PK_PricingGroupTypes] PRIMARY KEY CLUSTERED ([Id] ASC) 
); 

Определение таблицы (через SSMS):

USE [Toyland] 
GO 

/****** Object: Table [dbo].[PricingGroupTypes] Script Date: 11/14/2016 11:05:05 AM ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[PricingGroupTypes](
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [Name] [nvarchar](250) NOT NULL, 
CONSTRAINT [PK_PricingGroupTypes] PRIMARY KEY CLUSTERED 
(
    [Id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

Другие вставки в том же скрипте, похоже, не сработали, но общий скрипт будет откат, поэтому после выполнения базы данных будет пуст. И, как я уже сказал, тот же самый сценарий РАБОТАЕТ, когда я запускаю его в SQL Server Management Studio.

Возможно, есть некоторые настройки Visual Studio, которые мне не хватает, но это самый простой скрипт во всем проекте, поэтому вы можете понять, почему я озадачен.

+0

Я думаю, что это какой-то другой оператор Insert или вы уклонили скобки в своем проекте при построении запроса. –

+0

Есть ли в вашей таблице триггер? –

+0

@ChrisPratt Это должно дать мне два ряда. Столбец ID генерируется базой данных, поэтому все, что я должен указать, - это имя. – Matt

ответ

0
if not exists (select top 1 1 from [dbo].[PricingGroupTypes]) begin 
    INSERT INTO [dbo].[PricingGroupTypes] 
      ([Name]) 
     VALUES 
      ('User') 
      ,('Product Format') 
    print 'Pricing Group Types added' 
end 

Ваша проблема в том, что вы пытаетесь вставить два значения в один столбец. Попытка вставить «Пользователь» и «Формат продукта» в [Имя] отбросит ошибку, потому что ей нужен пункт назначения для формата продукта. Обновите инструкцию insert, чтобы включить второй столбец, и он должен идти.

+2

Я считаю, что это допустимый синтаксис для вставки нескольких строк одновременно. Вы вводите его в заблуждение с помощью «VALUES» («Пользователь», «Формат продукта»). –

+0

Хотя возможно, что параметр совместимости или уровня БД может интерпретировать «VALUES (« Пользователь ») (« Формат продукта ») как« ЦЕННОСТИ («Пользователь», «Формат продукта») », возможно, стоит проверить OP , –

+1

В заявлении нет ничего плохого. – Eric

1

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

К сожалению, я больше не знаю, какая другая часть большого скрипта была виновником, так как мне пришлось пройти и внести еще несколько изменений, чтобы все было нормально, но, похоже, проблемы с SQL в моем исходном вопросе.

Смежные вопросы