Dies ist nur ein einfaches Problem. Es ist das gleiche Problem wie beim Ändern einer Tabelle im Tabellendesigner. Ich glaube, Sie haben eine Spalte in Ihrem Tabellendesign geändert, die die Tabelle löschen und neu erstellen muss, damit die Spalte an derselben Position angeordnet werden kann.
Hier ist ein kurzes Beispiel. Nehmen Sie diese Tabelle Design wie folgt:
CREATE TABLE dbo.Test(
id int identity(1,1),
firstname nvarchar(100),
name nvarchar(100),
street nvarchar(100)
)
Dies wird die Spalten in einer angegebenen Reihenfolge erstellen. Sie können diese Reihenfolge sehen hier:
SELECT name, column_id
FROM sys.columns
WHERE object_id = OBJECT_ID(N'dbo.Test')
Sie werden so etwas sehen:
column_name column_id
id 1
firstname 2
name 3
street 4
Wenn Sie die Spalte name
über Designer oder in Ihrem Fall in den Daten Projekt ändern, wird dies dazu führen, SQL Server, um diese Reihenfolge aufrecht zu erhalten. In diesem Fall versuchen Sie, die Spalte name
in lastname
zu ändern. Dies erzwingt SQL Management Studio und andere Programme wie diese, um die column_id
aufrecht zu halten. Dies ist nur möglich, wenn die Tabelle mit der richtigen Spaltenreihenfolge vollständig neu erstellt wurde. SQL Server erstellt einen temporären Tabellenstub, fügt alles darin ein, löscht die alte Tabelle und benennt die temporäre Tabelle in den alten ursprünglichen Namen um. Genau wie in Ihrem Code oben.
Danach können Sie so etwas sehen werden:
column_name column_id
id 1
firstname 2
lastname 3
street 4
Wenn Sie einfach nur die letzte Spalte umbenennen würden oder es manuell tun, wäre alles in Ordnung. Manuell wäre viel effizienter, da nicht alle Daten in eine neue Tabelle verschoben werden müssen. Die manuelle Art und Weise wäre dies:
-- Create the new column
ALTER TABLE dbo.Test ADD lastname nvarchar(100)
GO
-- Populate the new column using the old one
UPDATE dbo.Test
SET lastname = name
GO
-- Drop the old column afterwards
ALTER TABLE dbo.Test DROP COLUMN name
Dieses Verhalten in folgendem Ergebnis führt:
column_name column_id
id 1
firstname 2
street 4
lastname 5
Die letzte viel effizienter sein wird, wie bereits erwähnt.
Hoffentlich wird dies Ihre Frage beantworten, auch wenn die Antwort in letzter Zeit kommt.
Sie können eine Spaltendefinition nicht ändern, wenn sie Teil eines Schlüssel/Index ist. Das Löschen der Schlüssel, das Ändern der Definition und das erneute Erstellen der Schlüssel ist im Allgemeinen kostspieliger als das Erstellen der parallelen Struktur mit der neuen Definition, das Löschen der alten und das Umbenennen. –