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