use*_*332 7 t-sql sql-server stored-procedures
我正在尝试创建将一些数据插入到我的表中的存储过程,但是我遇到了一些错误
列名无效
对于我在存储过程中指定的所有列.我有一个名为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
Run Code Online (Sandbox Code Playgroud)
这是表定义:
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
Run Code Online (Sandbox Code Playgroud)
如果您的表定义具有 IDENTITY 列,例如 IDENTITY(1,1),则不要在 INSERT INTO 语句中包含 MyId。IDENTITY 的重点是它给它下一个未使用的值作为主键值。
insert into MYDB.dbo.MainTable (MyFirstName, MyLastName, MyAddress, MyPort)
values(@myFirstName, @myLastName, @myAddress, @myPort)
Run Code Online (Sandbox Code Playgroud)
然后也不需要将 @MyId 参数传递到您的存储过程中。所以改成:
CREATE PROCEDURE [dbo].[sp_Test]
@myFirstName nvarchar(50)
,@myLastName nvarchar(50)
,@myAddress nvarchar(MAX)
,@myPort int
AS
Run Code Online (Sandbox Code Playgroud)
如果你想知道新插入的记录的ID是什么添加
选择@@身份
到您的程序结束。例如http://msdn.microsoft.com/en-us/library/ms187342.aspx
然后,您将能够以任何方式调用它,无论是 SQL 还是 .NET。
Ps 向您展示表格定义的更好方法是编写表格脚本并将文本粘贴到您的 stackoverflow 浏览器窗口中,因为您的屏幕截图缺少通过 GUI 设置 IDENTITY 的列属性部分。为此,右键单击表“Script Table as”--> 'CREATE to'--> 剪贴板。您还可以体验 File 或 New Query Editor Window(完全不言自明),看看您得到了什么。
归档时间: |
|
查看次数: |
110989 次 |
最近记录: |