【发布时间】:2016-11-14 17:04:41
【问题描述】:
我正在使用 Visual Studio 2015 数据库项目尝试将行插入到项目创建的数据库表中。 Insert 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
表定义(在数据库项目中):
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 设置,但这是整个项目中最直接的脚本部分,所以你可以看到我为什么感到困惑。
【问题讨论】:
-
我认为这是其他一些插入语句,或者您在构建查询时在项目中放错了括号
-
你的表有触发器吗?
-
@ChrisPratt 那应该给我两行。 ID 列是由数据库生成的,所以我只需要给出名称即可。
-
听起来很像您正在插入您认为的不同表(不同的架构等),或者您的陈述不是您的想法。使用分析器查看您实际执行的操作可能会有所帮助。
-
我会接受@JamesZ 的建议,即尝试使用分析器查看实际发生的情况 - 不幸的是,我看不出您的代码有任何问题。
标签: sql-server visual-studio tsql database-project