Ich bin nach einer einfachen gespeicherten Prozedur, um Tabellen zu löschen. Hier ist mein erster Versuch:Wie parameteriere ich eine gespeicherte T-SQL-Prozedur, die eine Tabelle löscht?
CREATE PROC bsp_susf_DeleteTable (@TableName char)
AS
IF EXISTS (SELECT name FROM sysobjects WHERE name = @TableName)
BEGIN
DROP TABLE @TableName
END
Wenn ich dies in MS Query Analyzer analysieren bekomme ich folgende Fehlermeldung:
Server: Msg 170, Level 15, State 1, Procedure bsp_susf_DeleteTable, Line 6
Line 6: Incorrect syntax near '@TableName'.
Welche Art Sinn macht, weil die normalen SQL für eine einzelne Tabelle würden:
Beachten Sie, dass die erste Instanz von tbl_XYZ (in der WHERE-Klausel) einfache Anführungszeichen hat, während die zweite Instanz in der DROP-Anweisung dies nicht tut. Wenn ich eine Variable (@TableName) verwende, kann ich diese Unterscheidung nicht treffen.
Also kann eine gespeicherte Prozedur erstellt werden, um dies zu tun? Oder muss ich die IF EXISTS kopieren ... überall?
Dank Wayne - hat gut funktioniert. – dave
Machen Sie @SQL nvarchar (max), da Tabellennamen nvarchar sind. (Eigentlich sysname, aber gleichbedeutend mit nvarchar (irgendeine Zahl, 128 vielleicht?) –
Sie sollten @TableName auch für eckige Klammern entziffern. SQL Server hat einen Befehl, der das für Sie erledigt. Setzen Sie @sql = 'drop table' + QuoteName (@ Tabellenname); –