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’ – > ‘创建’ – >剪贴板.您还可以进行文件或新查询编辑器窗口(所有自我解释)的实验,看看你得到了什么.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...