web-dev-qa-db-de.com

Verwenden Sie die gespeicherte Prozedur, um Daten in eine Tabelle einzufügen

Ich versuche, eine gespeicherte Prozedur zu erstellen, die einige Daten in meine Tabelle einfügt, aber ich bekomme einige Fehler wie 

Spaltenname ungültig

Für alle Spalten, die ich in meiner gespeicherten Prozedur angegeben habe. Ich habe eine IDENTITY COLUMN namens ID, die sich jedes Mal um eins erhöht, wenn ein Datensatz eingefügt wird. Ich habe auch einige andere Spalten in der Tabelle, aber sie können Null sein. Hier ist meine gespeicherte Prozedur und kann nicht herausfinden, was ich hier falsch mache. 

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

Hier ist die Tabellendefinition:

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
7
user1858332

Wenn Sie die Tabellendefinition haben, um eine IDENTITY-Spalte zu haben, z. IDENTITY (1,1) schließt dann MyId nicht in Ihre INSERT INTO-Anweisung ein. Der Punkt von IDENTITY ist, dass es den nächsten nicht verwendeten Wert als Primärschlüsselwert angibt.

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

Es ist dann nicht erforderlich, den Parameter @MyId in Ihre gespeicherte Prozedur zu übergeben. Ändern Sie es also in:

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

AS 

Wenn Sie wissen möchten, wie die ID des neu eingefügten Datensatzes ist, fügen Sie hinzu

SELECT @@ IDENTITY 

bis zum Ende Ihrer Prozedur. z.B. http://msdn.Microsoft.com/de-de/library/ms187342.aspx

Sie werden dann in der Lage sein, dies in welcher Weise auch immer Sie es nennen, sei es SQL oder .NET.

P.s. Eine bessere Möglichkeit, Ihnen die Tabellendefinition zu zeigen, wäre gewesen, die Tabelle mit einem Skript zu versehen und den Text in Ihr Stackoverflow-Browserfenster einzufügen, da in Ihrem Screenshot der Spalteneigenschaftsteil fehlt, in dem IDENTITY über die GUI festgelegt ist. Klicken Sie dazu mit der rechten Maustaste auf die Tabelle 'Script Table as' -> 'CREATE to' -> Clipboard. Sie können auch einen Datei- oder neuen Abfrageeditor (alles selbsterklärend) ausführen und sehen, was Sie bekommen.

4
Matthew Radford

wenn Sie eine Tabelle in SQL SERVER auffüllen möchten, können Sie die while-Anweisung folgendermaßen verwenden:

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

Ich hoffe es hilft. 

0
Manuel Pérez