Ich schrieb ein (scheinbar) unkompliziertes SQL-Snippet, das eine Spalte löscht, nachdem sichergestellt wurde, dass die Spalte existiert.
Das Problem: Wenn die Spalte nicht existiert, der Code innerhalb die IF-Klausel beschwert, dass es die Spalte nicht finden kann! Nun, doh, deshalb ist es in der IF-Klausel!
Also meine Frage ist, warum gibt ein Stück Code, der nicht ausgeführt werden sollte, Fehler?Warum gibt ein T-SQL-Block einen Fehler, selbst wenn er nicht einmal ausgeführt werden sollte?
Hier ist der Code-Schnipsel:
IF exists (select * from syscolumns
WHERE id=object_id('Table_MD') and name='timeout')
BEGIN
ALTER TABLE [dbo].[Table_MD]
DROP COLUMN timeout
END
GO
... und hier ist der Fehler:
Error executing SQL script [...]. Invalid column name 'timeout'
Ich bin mit Microsoft SQL Server 2005 Express Edition.
Korrekt. Sie erhalten diesen Fehler auch, wenn temporäre Tabellen herumliegen, die der Sproc verwendet. – ConcernedOfTunbridgeWells
Um zu klären, ob eine temporäre Tabelle existiert, werden die Spalten überprüft, wenn Sie den Sproc kompilieren. Wenn der Sproc die Tabelle tatsächlich erstellt (z. B. mit einer Auswahl in), müssen Sie möglicherweise die Tabelle löschen, bevor Sie den Sproc neu kompilieren. – ConcernedOfTunbridgeWells
Das ist eine sehr gute Antwort :) –