为什么这个insert语句与表不匹配?

时间:2016-11-14 17:04:41

标签: sql-server visual-studio tsql database-project

我正在使用Visual Studio 2015数据库项目尝试将行插入到项目创建的数据库表中。 Insert sql在SSMS中的同一个表中工作,但在通过项目运行时不起作用。

我收到错误: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

TSQL插入脚本:

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

表定义(在DB项目中):

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

表定义(通过ssms):

Add

同一脚本中的其他插入似乎没有失败,但整个脚本将回滚,因此数据库在执行后为空。并且,就像我说的,当我在SQL Server Management Studio中运行时,完全相同的脚本工作。

也许我缺少一些Visual Studio设置,但这是关于整个项目中最简单的脚本,所以你可以看到我为什么感到困惑。

2 个答案:

答案 0 :(得分:1)

最后,这里有一条评论暗示这可能是项目生成的整个脚本的其他部分的问题。事实证明是这样的。我现在已经解决了这个问题,原始问题中的代码没有改变。

不幸的是,我不知道,大型剧本的其他部分是罪魁祸首,因为我必须经历并做出一些其他改动以使一切顺利进行,但似乎没有任何问题在原始问题中使用SQL。

答案 1 :(得分: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语句以包含第二列,它应该去。