Ich möchte mehrere Tabellen abschneiden. Ich weiß, dass es auf die gleiche Weise nicht möglich ist, DELETE
wird die Zeilen aus mehreren Tabellen löschen.TRUNCATE mehrere Tabellen SQL Server 2014
In dieser Frage truncate multi tables IndoKnight bietet die OP-designierte beste Antwort. Ich möchte das versuchen. Allerdings bekomme ich einen Syntaxfehler bei:
TRUNCATE TABLE @tableName
zu beheben habe ich versucht, die Variablen Druck, denn wenn ich versuchte zunächst TRUNCATE TABLE
mit brauchte ich den Namen der Datenbank und das Schema (z NuggetDemoDB.dbo.tablename
) aufzunehmen, um es an die Arbeit. Ich kann die Variable @tableList
drucken. Aber ich kann nicht drucken @tableName
.
DECLARE @delimiter CHAR(1),
@tableList VARCHAR(MAX),
@tableName VARCHAR(20),
@currLen INT
SET @delimiter = ','
SET @tableList = 'Employees,Products,Sales'
--PRINT @tableList
WHILE LEN(@tableList) > 0
BEGIN
SELECT @currLen =
(
CASE charindex(@delimiter, @tableList)
WHEN 0 THEN len(@tableList )
ELSE (charindex(@delimiter, @tableList ) -1)
END
)
SET @tableName = SUBSTRING (@tableList,1,@currLen)
--PRINT @tableName
TRUNCATE TABLE @tableName
SELECT tableList =
(
CASE (len(@tableList) - @currLen )
WHEN 0 THEN ''
ELSE right(@tableList, len(@tableList) - @currLen - 1)
END
)
END
Edit: die Tabellenliste behoben, die extra „Verkauf“ aus der Liste der Tabellen und fügte hinzu: „Mitarbeiter“ zu entfernen.
Sie können Kennungen nicht parametrisieren. Ich bin irgendwie überrascht, dass dies niemand als Kommentar zu der Antwort geschrieben hat, mit der Sie verbunden sind. Sie müssen entweder eine andere Truncate-Anweisung für jede Tabelle oder dynamische SQL verwenden. –
Sie müssen ein wenig dynamisches SQL verwenden, um durch jede Tabelle zu iterieren. – Yobik
Eigentlich können Sie die Tabellenliste automatisieren. sys.objects und sys.tables sind gute Startpunkte. Verwenden Sie QUOTENAME (, '[]') –