Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

IDENTITY() vs. IDENTITY() in SQL Server:Was ist der Unterschied?

Es mag seltsam erscheinen, aber T-SQL hat eine IDENTITY() Eigenschaft und eine IDENTITY() Funktion, die jeweils einem (ähnlichen, aber) unterschiedlichen Zweck dienen.

  • Die IDENTITY() -Eigenschaft erstellt eine Identitätsspalte in einer Tabelle. Eine Identitätsspalte enthält eine automatisch inkrementierende Identifikationsnummer. Diese Eigenschaft wird mit CREATE TABLE verwendet und ALTER TABLE Aussagen.
  • Die IDENTITY() Funktion wird jedoch nur in einem SELECT verwendet Anweisung mit einem INTO Tabellenklausel, um eine Identitätsspalte in eine neue Tabelle einzufügen.

Es gibt auch die SQL-DMO Identity -Eigenschaft, die die Zeilenidentitätseigenschaft einer Spalte verfügbar macht, aber darauf werde ich hier nicht eingehen. Microsoft weist darauf hin, dass diese Eigenschaft in einer zukünftigen Version von SQL Server entfernt wird und dass Sie sie bei neuen Entwicklungsarbeiten nicht verwenden sollten.

IDENTITY()-Eigenschaft

Hier ist ein Beispiel für die Verwendung von IDENTITY() Eigentum.

CREATE TABLE Pets (
    PetId int IDENTITY(1,1) PRIMARY KEY, 
    PetName varchar(255)
    );

Dieser Code erstellt eine Tabelle mit zwei Spalten. Die erste Spalte (PetId ) ist eine Identitätsspalte (weil ich die IDENTITY() verwende Eigentum in seiner Definition).

Nachdem ich nun eine Identitätsspalte erstellt habe, kann ich Haustiernamen in PetName einfügen Spalte, ohne dass für jede Zeile eine ID angegeben werden muss.

INSERT INTO Pets (PetName)
VALUES ('Homer'), ('Felix'), ('Ruff');

SELECT * FROM Pet;

Ergebnis:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 1       | Homer     |
| 2       | Felix     |
| 3       | Ruff      |
+---------+-----------+

In diesem Fall beginnt die Nummerierung bei 1 und jede Zeile erhöht sich um 1. Das liegt daran, dass ich IDENTITY(1,1) verwendet habe um anzugeben, dass der Seed-Wert 1 ist und bei jeder neuen Zeile um 1 erhöht wird.

IDENTITY()-Funktion

Wie bereits erwähnt, die IDENTITY() Funktion wird in einem SELECT INTO verwendet Erklärung. Hier ist ein Beispiel für die Verwendung von IDENTITY() Funktion.

SELECT 
  IDENTITY(int, 101, 10) AS pet_id,
  PetName AS pet_name
INTO BestFriends
FROM Pets;

SELECT * FROM BestFriends;

Ergebnis:

+----------+------------+
| pet_id   | pet_name   |
|----------+------------|
| 101      | Homer      |
| 111      | Felix      |
| 121      | Ruff       |
+----------+------------+

Hier habe ich eine Tabelle namens BestFriends erstellt und füllte es aus den Pets Tisch.

In diesem Fall habe ich die Zählung bei 101 begonnen und um 10 erhöht. Beachten Sie auch, dass die Funktion das erste Argument benötigt, um den Datentyp der Spalte anzugeben.