Удалить все таблицы с определенным именем префикса в базе данных SQL 2008 программным путем - PullRequest
0 голосов
/ 04 июля 2011

В моей базе данных SQL 2008 есть более 3000 таблиц с именами, подобными перечисленным ниже, которые начинаются с tempBinary_, которые мне нужно удалить программным способом, как мне это сделать? Я не знаю, предпочитаю ли я решение в SQL-скрипте или с использованием LINQtoSQL, я думаю, что оба в порядке.

tempBinary_002c90322f4e492795a0b8a14e2f7c99 tempBinary_0039f7db05a9456f96eb3cd6a788225a tempBinary_0057da9ef0d84017b3d0bbcbfb934fb2

Я использовал Like для столбцов, но я не знаю, подходит ли это и для имен таблиц. Может быть, что-то вроде этого, где используется LIKE, может это сделать? Я не знаю.

Use [dbo].[database_name]
DROP TABLE table_name
WHERE table_name LIKE 'tempBinary_%'

Есть идеи?

1 Ответ

2 голосов
/ 04 июля 2011
declare @stmt varchar(max) = ''
declare @tbl_name varchar(255)


DECLARE tbl_cursor CURSOR  FORWARD_ONLY READ_ONLY
    FOR select name 
        from sysobjects 
        where xtype='u' and name like 'tempBinary%'
OPEN tbl_cursor
FETCH NEXT FROM tbl_cursor
INTO @tbl_name;

WHILE @@FETCH_STATUS = 0
BEGIN
    set @stmt = @stmt + 'drop table ' + @tbl_name + ';' +  CHAR(13)


    FETCH NEXT FROM tbl_cursor 
    INTO @tbl_name
end
CLOSE tbl_cursor;
DEALLOCATE tbl_cursor;    

execute sp_sqlexec @stmt
...