Microsoft SQL Server scheint die Gültigkeit des Spaltennamens, aber nicht die Gültigkeit des Tabellennamens zu überprüfen, wenn gespeicherte Prozeduren definiert werden. Wenn festgestellt wird, dass derzeit ein referenzierter Tabellenname vorhanden ist, werden die Spaltennamen in einer Anweisung anhand der Spalten in dieser Tabelle überprüft. So zum Beispiel wird dies laufen OK:Warum prüft Microsoft SQL Server Spalten, aber keine Tabellen in gespeicherten Procs?
CREATE PROCEDURE [dbo].[MyProcedure]
AS
BEGIN
SELECT
Col1, Col2, Col3
FROM
NonExistentTable
END
GO
... ebenso wie folgt aus:
CREATE PROCEDURE [dbo].[MyProcedure]
AS
BEGIN
SELECT
ExistentCol1, ExistentCol2, ExistentCol3
FROM
ExistentTable
END
GO
... aber dies nicht gelingt, mit 'Ungültiger Spaltenname':
CREATE PROCEDURE [dbo].[MyProcedure]
AS
BEGIN
SELECT
NonExistentCol1, NonExistentCol2, NonExistentCol3
FROM
ExistentTable
END
GO
Warum prüft SQL Server Spalten, aber keine Tabellen auf Existenz? Sicher ist es inkonsequent; es sollte beides oder keines tun. Es ist für uns nützlich, SPs zu definieren, die sich auf Tabellen UND/ODER-Spalten beziehen, die noch nicht im Schema vorhanden sind, also gibt es eine Möglichkeit, die Überprüfung der Spaltenexistenz in Tabellen, die derzeit existieren, zu deaktivieren ?
Welches ist; die Nichtüberprüfung von Tabellen oder die Überprüfung von Spalten? – Jez
Die Nichtüberprüfung von Tabellen. Wenn alle in einer Anweisung verwendeten Tabellen existieren, werden sie nicht zurückgestellt. –
Danke für die Erklärung; Warum musstest du DROP TABLE #Dummy? Werden temporäre Tabellen nicht automatisch gelöscht, nachdem der gespeicherte Prozess beendet wurde? – Jez