Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Построить список из конкретных баз


Автор: Jonny 22.9.2005, 13:36
Подскажите пожалуйсто как можно провернуть такое.
Хотелось что бы при подключении юзера к различным сервакам выпадал список баз, только не всех. Проблема как наложить фильтр на отображение smile. Не охото снова возвращаться к BDE и Alias'aм.

Автор: boevik 22.9.2005, 13:42
По какому принципу надо наложить фильтер?
Список всех баз возвращает процедура:
Код

master..sp_databases

Автор: Jonny 22.9.2005, 13:58
Можно ли наложить фильтр, к примеру, по содержанию в базе определенной таблички?

Автор: boevik 22.9.2005, 14:07
Можно, для этого надо в каждой базе просмотреть таблицу sysobjects.
Таблицы имеют xtype='U'
К примеру, список всех таблиц в MASTER
Код

select [name] from master..sysobjects
where xtype = 'U'

Автор: Sh@dow 22.9.2005, 14:21
Может предложите более рациональный способ, чем просматривать кучу таблиц? Сами базы править мы не можем в чем вся и проблема smile

Автор: SergKO 23.9.2005, 07:40
Если долго не думать, то можно так


Код

declare @table nvarchar(50)
select @table = 'имя таблицы'

CREATE TABLE #t (ind int IDENTITY (1, 1) NOT NULL, db nvarchar(128), db_size int, ren ntext)
CREATE TABLE #db_list (db_name nvarchar(128))
INSERT INTO #t exec sp_databases
DECLARE @name_db nvarchar(128), @str nvarchar(1000), @id int, @id_tmp int, @fl int
SELECT TOP 1 @id = ind, @name_db = db FROM #t
WHILE ( 1=1 )
    BEGIN
    SELECT @str = 'USE '+@name_db
    SELECT @str = @str + ';SELECT @fl = 0
        IF EXISTS(SELECT * FROM sysobjects WHERE xtype = ''U'' AND [name] = '''+@table+''')
        BEGIN
        SELECT @fl = 1
        END'
    EXECUTE sp_executesql @str, N'@fl int out', @fl = @fl out
    IF @fl = 1
        INSERT INTO #db_list VALUES (@name_db)
    SELECT @id_tmp = @id
    SELECT @id = NULL
    SELECT TOP 1 @id = ind, @name_db = db FROM #t WHERE ind > @id_tmp
    IF @id IS NULL
        BREAK
    END
--получаем список баз в которых присутствует таблица @table
SELECT * FROM #db_list

DROP TABLE #t
DROP TABLE #db_list


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)