2012-10-29 156 views

回答

1

下面的查詢將自動刪除表:

BEGIN TRANSACTION 

    DECLARE @tmpTablesToDelete TABLE ( 
             RowNumber INT PRIMARY KEY 
             ,Query NVARCHAR(MAX) 
            ) 

    INSERT INTO 
      @tmpTablesToDelete 
    SELECT 
     RowNumber = ROW_NUMBER() OVER (ORDER BY (SELECT (0))) 
     ,'DROP TABLE '+schemas.name+'.'+objects.name AS Query 
    FROM 
     sys.objects 
    INNER JOIN 
     sys.schemas 
    ON 
     schemas.schema_id = objects.schema_id 
    WHERE 
     type = 'U' AND objects.name like 'g_str%' 

    DECLARE @Counter INT 
    SELECT @Counter = MAX(RowNumber) FROM @tmpTablesToDelete 

    WHILE(@Counter > 0) BEGIN 

     DECLARE @Query NVARCHAR(MAX) 

     SELECT @Query = Query FROM @tmpTablesToDelete WHERE RowNumber = @Counter 

     PRINT @Query 

     EXEC sp_executesql @statement = @Query 

     SET @Counter = @Counter - 1 

    END 

    COMMIT TRANSACTION 
4
SELECT 
'DROP TABLE ' + QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name) + ';' 
FROM sys.tables 
WHERE name LIKE 'g\_str%' ESCAPE '\' 

然後檢查腳本並運行它。

concatenate the result成一個單一的字符串可以,如果你需要一個完全自動化的解決方案與EXEC執行。

3

你可以使用動態SQL:

DECLARE @SQL NVARCHAR(MAX) = ''; 

SELECT @SQL = @SQL + 'DROP TABLE ' + QUOTENAME(SCHEMA_NAME([Schema_ID])) + '.' + QUOTENAME([name]) + ';' 
FROM sys.tables 
WHERE Name LIKE 'g\_str%' ESCAPE('\'); 

EXECUTE SP_EXECUTESQL @SQL; 
+1

這也將刪除表開始'gastro'爲'_'是通配符。 –

+1

@MartinSmith謝謝,看來我永遠不會停止向你學習!我已更正了我的答案(因爲它包含了您在答案中提到的自動化解決方案),所以只能將其保留下來, – GarethD

+0

非常感謝您的答覆。 – user1681514