2016-11-14 2 views
0

Ich verwende ein Visual Studio 2015-Datenbankprojekt, um zu versuchen, Zeilen in Datenbanktabellen einzufügen, die vom Projekt erstellt wurden. Der Insert-SQL funktioniert in der gleichen Tabelle in SSMS, aber nicht, wenn er über das Projekt ausgeführt wird.Warum stimmt diese Einfügeanweisung nicht mit der Tabelle überein?

ich den Fehler: Column name or number of supplied values does not match the table definition.

TSQL Insert-Skript:

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 

Tabellendefinition (in DB-Projekt):

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

Tabelle Definition (über 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 

Andere Einfügungen im selben Skript scheinen nicht zu versagen, aber das gesamte Skript wird zurückgesetzt, sodass die Datenbank nach der Ausführung leer ist. Und, wie ich schon sagte, das gleiche Skript funktioniert, wenn ich es in SQL Server Management Studio ausführen.

Vielleicht gibt es einige Visual Studio-Einstellung, die ich vermisse, aber das ist über die einfachste Bit des Skripts im gesamten Projekt, so können Sie sehen, warum ich perplex bin.

+0

Ich denke, es ist eine andere Insert-Anweisung, oder Sie haben die Klammern in Ihrem Projekt beim Erstellen der Abfrage verlegt –

+0

Hat Ihre Tabelle einen Trigger? –

+0

@ChrisPratt Das sollte mir zwei Zeilen geben. Die ID-Spalte wird von der Datenbank generiert, daher muss ich nur den Namen angeben. – Matt

Antwort

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 

Ihr Problem ist, dass Sie versuchen, zwei Werte in eine Spalte einzufügen. Der Versuch, 'Benutzer' und 'Produktformat' in [Name] einzufügen, führt zu einem Fehler, da ein Ziel für das Produktformat benötigt wird. Aktualisieren Sie Ihre Insert-Anweisung, um die zweite Spalte einzuschließen, und es sollte gehen.

+2

Ich glaube, das ist gültige Syntax, um mehrere Zeilen gleichzeitig einzufügen. Sie verwechseln es mit 'VALUES ('User', 'Product Format')'. –

+0

Obwohl vielleicht eine Kompatibilitäts- oder DB-Level-Einstellung "VALUES ('User'), ('Product Format')' als 'VALUES ('User', 'Product Format') interpretieren könnte, lohnt sich vielleicht eine Überprüfung durch das OP . –

+1

Es ist nichts falsch mit der Aussage. – Eric

1

Am Ende gab es einen Kommentar, der darauf hinwies, dass es vielleicht ein Problem mit einem anderen Teil meines vom Projekt generierten Skripts war. Dies stellte sich als der Fall heraus. Ich habe jetzt das Problem gelöst und der Code in der ursprünglichen Frage ist unverändert.

Leider weiß ich nicht mehr, welcher andere Teil des großen Drehbuchs der Täter war, da ich einige Änderungen vornehmen musste, um alles reibungslos laufen zu lassen, aber es schien keine zu geben Probleme mit dem SQL in meiner ursprünglichen Frage.

Verwandte Themen