Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 删除以特定字符开头的表_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 删除以特定字符开头的表

Sql 删除以特定字符开头的表,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有多个表名,比如g_str_a、g_str_ab、g_str_abc。我想删除SQL Server 2008上所有以g_str开头的表 是否会删除像“g_str”这样的表格帮助 请帮我写剧本 SELECT 'DROP TABLE ' + QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name) + ';' FROM sys.tables WHERE name LIKE 'g\_str%' ESCAPE '\' 然后检查脚本并运行它

我有多个表名,比如g_str_a、g_str_ab、g_str_abc。我想删除SQL Server 2008上所有以g_str开头的表

是否会删除像“g_str”这样的表格
帮助

请帮我写剧本

SELECT 
'DROP TABLE ' + QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name) + ';'
FROM sys.tables
WHERE name LIKE 'g\_str%'  ESCAPE '\'
然后检查脚本并运行它


如果需要一个完全自动化的解决方案,您还可以将其转换为单个字符串,并使用
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;

以下查询将自动删除表:

    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

这也将删除以
gastro
开头的表,因为
\u
是一个通配符。@MartinSmith谢谢,我似乎从未停止向您学习!我已经更正了我的答案(只留下它,因为它包含了您在答案中提到的自动解决方案),非常感谢您的回答。