2013-01-03 13 views
6

Próbuję utworzyć procedurę przechowywaną, która wstawia jakieś dane na moim stole, ale ja dostaję jakieś błędy jakZastosowanie procedury przechowywanej, aby wstawić niektóre dane do tabeli

Nieprawidłowa nazwa kolumny

Dla wszystkich kolumn, które określiłem w mojej procedurze przechowywanej. Mam IDENTITY COLUMN o nazwie ID, która zwiększa się o jeden za każdym razem, gdy wstawi się rekord. Mam również inne kolumny w tabeli, ale mogą one mieć wartość zerową. Oto moja procedura przechowywana i nie mogę zrozumieć, co robię źle tutaj.

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 

Oto definicja tabeli:

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

Pokaż definicję tabeli. –

+2

Jeśli jest to kolumna tożsamości, po prostu wyklucz ją z listy kolumn. Możesz również dodać try/catch. – Kermit

+0

Właśnie dodałem definicję tabeli. Dodałem również kolumnę Tożsamość, ale wciąż otrzymuję ten sam błąd. dziękuję za pomoc – user1858332

Odpowiedz

4

Jeśli masz definicję tabeli mieć kolumny tożsamości np TOŻSAMOŚĆ (1,1) nie uwzględnia wtedy MyId w instrukcji INSERT INTO. Punkt TOŻSAMOŚCI jest to, że podaje następną nieużywaną wartość jako klucz podstawowy.

insert into MYDB.dbo.MainTable (MyFirstName, MyLastName, MyAddress, MyPort) 
values(@myFirstName, @myLastName, @myAddress, @myPort) 

Nie ma również potrzeby przekazywania parametru @MyId do procedury przechowywanej. Więc go zmienić na:

CREATE PROCEDURE [dbo].[sp_Test] 
@myFirstName nvarchar(50) 
,@myLastName nvarchar(50) 
,@myAddress nvarchar(MAX) 
,@myPort int 

AS 

Jeśli chcesz wiedzieć, co identyfikator nowo wstawionym rekordzie jest dodać

select @@ IDENTITY

do końca swojego postępowania. na przykład http://msdn.microsoft.com/en-us/library/ms187342.aspx

Będziesz wtedy w stanie wybrać to, w jaki sposób nazywasz to SQL lub .NET.

P.s. lepszym sposobem na pokazanie definicji tabeli byłoby skryptowanie tabeli i wklejanie tekstu do okna przeglądarki stackoverflow, ponieważ na ekranie brakuje części właściwości kolumny, w której ustawiono IDENTITY za pomocą GUI. Aby to zrobić, kliknij prawym przyciskiem myszy tabelę "Tabela skryptów jako" -> "CREATE to" -> Clipboard. Możesz także wykonać okno Plik lub Nowy edytor zapytań (samouczek) i zobaczyć, co otrzymasz.

+0

'MyID' nie jest polem' identity'. Pole tożsamości to "id". – Taryn

+0

Dobra robota, znacznie lepsza definicja stołu. –

+0

Tak, to prawda, MyID nie jest tożsamością. Kolumna Identity nosi nazwę ID. Już zaktualizowałem definicję tabeli za pomocą skryptu. dzięki – user1858332

0

jeśli chcesz wypełnić tabelę w SQL Server można użyć podczas oświadczenie następująco:

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 

nadzieję, że to pomaga.

Powiązane problemy