2012-10-29 5 views
0

g_str_a, g_str_ab, g_str_abc와 같은 여러 표 이름이 있습니다. SQL Server 2008에서 g_str로 시작하는 모든 테이블을 삭제하고 싶습니다.특정 문자로 시작하는 놓기 표

DROP Tables like 'g_str' 도움이 될까요?

제발 도와주세요.

답변

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 '\' 

그런 다음 스크립트를 검토하고 실행하십시오.

완전히 자동화 된 솔루션이 필요한 경우 EXEC으로 실행하면 concatenate the result을 단일 문자열로 사용할 수 있습니다.

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

관련 문제