我正在尝试创建将一些数据插入到我的表中的存储过程,但是我遇到了一些错误
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’ – > ‘创建’ – >剪贴板.您还可以进行文件或新查询编辑器窗口(所有自我解释)的实验,看看你得到了什么.