2013-01-03 75 views
6

我試圖創建一個插入一些數據到我的表的存儲過程,但我得到了一些錯誤,如使用存儲過程來插入一些數據表

無效列名

對於我在存儲過程中指定的所有列。我有一個名爲ID的IDENTITY COLUMN,每插入一次記錄就會增加一個。我在表中還有其他一些列,但它們可以爲空。這裏是我的存儲過程,無法弄清楚我在這裏做錯了什麼。

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 
+1

顯示您的表格定義。 –

+2

如果是標識列,您只需將其從列列表中排除即可。您可能還想添加try/catch。 – Kermit

+0

我剛剛添加了表格定義。我也添加了標識列,但仍然得到相同的錯誤。感謝您的幫助 – user1858332

回答

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的列屬性部分。要做到這一點,請右鍵單擊表'腳本表' - >'創建到' - >剪貼板。你也可以做文件或新的查詢編輯器窗口(所有自我解釋)的經驗,看看你得到什麼。

+0

「MyID」不是「身份」字段。身份字段是'id'。 – Taryn

+0

做得好,表格定義好得多。 –

+0

是的,那是真的MyID不是身份。身份列被稱爲ID。我已經用腳本更新了表格定義。謝謝 – user1858332

0

如果你想填充表中的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 

希望它能幫助。

相關問題