我正在尝试创建将一些数据插入到我的表中的存储过程,但是我遇到了一些错误,比如
列名无效
对于我在存储过程中指定的所有列。我有一个名为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
答案 0 :(得分:4)
如果您的表定义具有IDENTITY列,例如IDENTITY(1,1)然后在INSERT INTO语句中不包含MyId。 IDENTITY的重点是它将下一个未使用的值作为主键值。
insert into MYDB.dbo.MainTable (MyFirstName, MyLastName, MyAddress, MyPort)
values(@myFirstName, @myLastName, @myAddress, @myPort)
然后,无需将@MyId参数传递到存储过程中。所以改成它:
CREATE PROCEDURE [dbo].[sp_Test]
@myFirstName nvarchar(50)
,@myLastName nvarchar(50)
,@myAddress nvarchar(MAX)
,@myPort int
AS
如果您想知道新添加的记录的ID是什么?
SELECT @@ IDENTITY
到你的程序结束。例如http://msdn.microsoft.com/en-us/library/ms187342.aspx
然后,您将能够选择这种方式,无论您使用SQL还是.NET。
P.S。一个更好的方法来显示表格定义是脚本表并将文本粘贴到stackoverflow浏览器窗口,因为您的屏幕截图缺少通过GUI设置IDENTITY的列属性部分。要做到这一点,请右键单击表'Script Table as' - > '创建' - >剪贴板。您还可以进行文件或新查询编辑器窗口(所有自我解释)的实验,看看你得到了什么。
答案 1 :(得分:0)
如果您尝试返回范围内的ID,则使用SCOPE_IDENTITY()
是更好的方法。我不建议使用@@IDENTITY
,因为它可以返回任何ID。
CREATE PROC [dbo].[sp_Test] (
@myID int output,
@myFirstName nvarchar(50),
@myLastName nvarchar(50),
@myAddress nvarchar(50),
@myPort int
) AS
BEGIN
INSERT INTO Dvds (myFirstName, myLastName, myAddress, myPort)
VALUES (@myFirstName, @myLastName, @myAddress, @myPort);
SET @myID = SCOPE_IDENTITY();
END
GO
答案 2 :(得分:-1)
如果要在SQL SERVER中填充表,可以使用while语句,如下所示:
declare @llenandoTabla INT = 0;
while @llenandoTabla < 10000
begin
insert into employeestable // Name of my table
(ID, FIRSTNAME, LASTNAME, GENDER, SALARY) // Parameters of my table
VALUES
(555, 'isaias', 'perez', 'male', '12220') //values
set @llenandoTabla = @llenandoTabla + 1;
end
希望它有所帮助。