我有多個表名,例如g_str_a,g_str_ab,g_str_abc。我想刪除所有以SQL Server 2008上的g_str開頭的表。刪除以特定字符開頭的表格
請問DROP Tables like 'g_str'
有幫助嗎?
請幫助我的腳本。
我有多個表名,例如g_str_a,g_str_ab,g_str_abc。我想刪除所有以SQL Server 2008上的g_str開頭的表。刪除以特定字符開頭的表格
請問DROP Tables like 'g_str'
有幫助嗎?
請幫助我的腳本。
下面的查詢將自動刪除表:
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
SELECT
'DROP TABLE ' + QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name) + ';'
FROM sys.tables
WHERE name LIKE 'g\_str%' ESCAPE '\'
然後檢查腳本並運行它。
也concatenate the result成一個單一的字符串可以,如果你需要一個完全自動化的解決方案與EXEC
執行。
你可以使用動態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;
這也將刪除表開始'gastro'爲'_'是通配符。 –
@MartinSmith謝謝,看來我永遠不會停止向你學習!我已更正了我的答案(因爲它包含了您在答案中提到的自動化解決方案),所以只能將其保留下來, – GarethD
非常感謝您的答覆。 – user1681514