Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Получить список таблиц, при известной записи  [new]
n0013
Guest
Здравствуйте форумчане.
Подскажите пожалуйста как средствами sql создать запрос на получение списка таблиц (базы), зная лишь что в одной из них храниться значение, ну например:
в определенном поле хранится запись 'Евгений'. Как построить запрос (или еще какими нибудь методами, например в процедуре), чтобы выводились названия таблиц базы.
20 ноя 08, 18:22    [6468370]     Ответить | Цитировать Сообщить модератору
 Re: Получить список таблиц, при известной записи  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Ищите поиском, раз в неделю тема поднимается.
20 ноя 08, 18:40    [6468440]     Ответить | Цитировать Сообщить модератору
 Re: Получить список таблиц, при известной записи  [new]
EvAlex
Member

Откуда: Israel
Сообщений: 1001
Ну можно что-то подобное...
DECLARE @Tables TABLE(TableName SYSNAME)
DECLARE @Results TABLE(TableName SYSNAME)
INSERT INTO @Tables SELECT TABLE_NAME FROM INFORMATION_SCHEMA.Tables
WHILE EXISTS(SELECT TOP 1 1 FROM @Tables) --цикл по всем таблицам
BEGIN
	DECLARE @TableName SYSNAME
	SELECT TOP 1 @TableName = TableName FROM @Tables
	DECLARE @Columns TABLE(ColumnName NVARCHAR(256))
	INSERT INTO @Columns SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = @TableName AND DATA_TYPE IN ('varchar','nvarchar') -- цикл по текстовым полям
	WHILE EXISTS(SELECT TOP 1 1 FROM @Columns)
	BEGIN
		DECLARE @ColumnName NVARCHAR(256), @SQL NVARCHAR(4000), @Result INT
		SELECT TOP 1 @ColumnName = ColumnName FROM @Columns
		SET @SQL = 'IF EXISTS(SELECT TOP 1 1  FROM [' + @TableName + '] WHERE [' + @ColumnName + '] LIKE ''%Евгений%'') SET @Result = 1 ELSE SET @Result = 0'
		EXEC sp_ExecuteSQL @SQL, N'@Result INT OUT', @Result = @Result OUT
		IF @Result = 1
			BEGIN
				INSERT INTO @Results SELECT @TableName
				BREAK
			END
		DELETE FROM @Columns WHERE ColumnName = @ColumnName
	END
	DELETE FROM @Tables WHERE TableName = @TableName
END
SELECT * FROM @Results
20 ноя 08, 18:54    [6468492]     Ответить | Цитировать Сообщить модератору
 Re: Получить список таблиц, при известной записи  [new]
n0013
Guest
O_O
спасибо всем ... особенно EvAlex
я ведь знал, что не надо изобретать велосипед ...
20 ноя 08, 19:09    [6468538]     Ответить | Цитировать Сообщить модератору
 Re: Получить список таблиц, при известной записи  [new]
EvAlex
Member

Откуда: Israel
Сообщений: 1001
n0013
O_O
спасибо всем ... особенно EvAlex
я ведь знал, что не надо изобретать велосипед ...

Угу... но скрипт всё равно дорабатывать придётся.
20 ноя 08, 19:12    [6468549]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Получить список таблиц, при известной записи  [new]
Apikaster
Member

Откуда:
Сообщений: 51
А как найти в какой на данный момент базе он работает ?
По скольку когда пишем INFORMATION_SCHEMA.TABLES WHERE TABLE_CATALOG= текущей базе.
14 сен 11, 10:02    [11273461]     Ответить | Цитировать Сообщить модератору
 Re: Получить список таблиц, при известной записи  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Apikaster
А как найти в какой на данный момент базе он работает ?
По скольку когда пишем INFORMATION_SCHEMA.TABLES WHERE TABLE_CATALOG= текущей базе.
БАЗА.INFORMATION_SCHEMA.TABLES 
??
14 сен 11, 10:07    [11273484]     Ответить | Цитировать Сообщить модератору
 Re: Получить список таблиц, при известной записи  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
iap
Apikaster
А как найти в какой на данный момент базе он работает ?
По скольку когда пишем INFORMATION_SCHEMA.TABLES WHERE TABLE_CATALOG= текущей базе.
БАЗА.INFORMATION_SCHEMA.TABLES 
??
И перебрать все базы, разумеется
14 сен 11, 10:07    [11273485]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить