2015-04-16 12 views

Antwort

4

According to MSDN, der richtige Name für diese ist system functions.

Die Benennungsverwechslung (globale Variable, Systemfunktion, globale Funktion) stammt aus unterschiedlichen Terminologien, die in der gesamten SQL Server-Historie verwendet wurden. Vom MSDN Transact-SQL Variables article:

Die Namen einiger Transact-SQL-Systemfunktionen beginnen mit zwei an Zeichen (@@). Obwohl in früheren Versionen von Microsoft SQL Server die Funktionen @@ als globale Variablen bezeichnet werden, sind sie keine Variablen und haben nicht das gleiche Verhalten wie Variablen. Die @@ Funktionen sind Systemfunktionen und ihre Syntaxnutzung folgt den Regeln für Funktionen.

Somit werden zwei at-Symbole (@@) verwendet, um einige Systemfunktionen zu bezeichnen. Die Verwendung der Phrase "globale Variable" war veraltet (obwohl Sie immer noch sehen some people use it), höchstwahrscheinlich, weil in der Programmierwelt eine globale Variable ist ein einzelner Wert, der überall sichtbar ist, und wie bereits darauf hingewiesen, dass nicht was ist passiert hier (z. B. @@IDENTITY).

Weitere Verwirrung wird wahrscheinlich durch die Art, wie temporäre Tabellen benannt werden, verursacht. Ein einzelnes Hash-Zeichen, das einem Tabellennamen vorangestellt ist, zeigt eine lokal begrenzte temporäre Tabelle an (z. B. #MyLocalTable), ähnlich wie ein einzelnes Symbol eine lokal begrenzte Variable anzeigt (z. B.). Das Hinzufügen eines zweiten Hashzeichens zu einer temporären Tabelle macht es global (z. B. ##MyGlobalTable), aber versucht, zwei Variablen zu einer Variablen does not produce the same effect hinzuzufügen.

3

@ für eine lokale ist Variable

@@ ist für eine globale Variable oder Funktion.

Es gibt mehrere Standard globale Variablen oder Funktionen, z.B .: @@IDENTITY, @@ROWCOUNT, @@TRANCOUNT

+0

Also hast du eine Quelle dafür? Weil Sie vorschlagen, dass "@@ IDENTITY" global ist, was bedeutet, dass alle Benutzer den gleichen Wert sehen. Also, wenn ich eine 'INSERT' und dann 'SELECT @@ IDENTITY' mache, könnte ich die Identität einer Einfügung von einem völlig anderen Benutzer erhalten? – funkwurm

+1

@funkwurm, weshalb Sie scope_identity https://msdn.microsoft.com/en-us/library/ms190315.aspx obwohl beide durch Sitzung begrenzt, aber immer noch es ist eine Art von globalen – pinkfloydx33

Verwandte Themen