微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql-server – 使用存储过程将一些数据插入表中

我正在尝试创建将一些数据插入到我的表中的存储过程,但是我遇到了一些错误

Invalid Column name

对于我在存储过程中指定的所有列.我有一个名为ID的IDENTITY COLUMN,每次插入记录时都会增加1.我在表中还有一些其他列,但它们可以为null.这是我的存储过程,无法弄清楚我在这里做错了什么.

USE MYDB
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[sp_Test]
  @myID bigInt,@myFirstName nvarchar(50),@myLastName nvarchar(50),@myAddress nvarchar(MAX),@myPort int

AS 
BEGIN 

 SET NOCOUNT ON; 

  BEGIN 

insert into MYDB.dbo.MainTable (MyID,MyFirstName,MyLastName,MyAddress,MyPort)
values(@myID,@myFirstName,@myLastName,@myAddress,@myPort)

  END 

END
GO

这是表定义:

USE [MYDB]
GO

/****** Object:  Table [dbo].[MainTable]    Script Date: 01/03/2013 11:17:17 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[MainTable](
    [ID] [bigint] IDENTITY(1,1) NOT NULL,[MyID] [bigint] NULL,[MyFirstName] [nvarchar](50) NULL,[MyLastName] [nvarchar](50) NULL,[MyAddress] [nvarchar](max) NULL,[MyPort] [int] NULL,[MyZipCode] [nchar](10) NULL,[CompName] [nvarchar](50) NULL
) ON [PRIMARY]

GO

解决方法

如果您将表定义设置为具有IDENTITY列,例如IDENTITY(1,1)然后在INSERT INTO语句中不包含MyId. IDENTITY的重点是它将下一个未使用的值作为主键值.
insert into MYDB.dbo.MainTable (MyFirstName,MyPort)
values(@myFirstName,@myPort)

然后,无需将@MyId参数传递到存储过程中.所以改成它:

CREATE PROCEDURE [dbo].[sp_Test]
@myFirstName nvarchar(50),@myPort int

AS

如果您想知道添加新插入记录的ID

SELECT @@ IDENTITY

到你的程序结束.例如http://msdn.microsoft.com/en-us/library/ms187342.aspx

然后,您将能够选择这种方式,无论您使用sql还是.NET.

附:一个更好的方法显示表格定义,就是编写表格并将文本粘贴到stackoverflow浏览器窗口,因为屏幕截图缺少通过GUI设置IDENTITY的列属性部分.要做到这一点,请右键单击表’Script Table as’ – > ‘创建’ – >剪贴板.您还可以进行文件或新查询编辑器窗口(所有自我解释)的实验,看看你得到了什么.

原文地址:https://www.jb51.cc/mssql/76760.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐