powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Перебрать таблицы на наличие определённого номера в полях
9 сообщений из 9, страница 1 из 1
Перебрать таблицы на наличие определённого номера в полях
    #39888300
Earl11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Вопрос в следующем - имеется список таблиц, в каждой из этих таблиц имеется одноимённое поле. Можно ли как-то перебрать (в цикле или нет) все эти поля на наличие определённого номера?
Т.е. нужен, например, ProdID = 5, в результате получить все значения (ValueA, ValueB)
...
Рейтинг: 0 / 0
Перебрать таблицы на наличие определённого номера в полях
    #39888314
Remind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dynamic sql
...
Рейтинг: 0 / 0
Перебрать таблицы на наличие определённого номера в полях
    #39888328
Earl11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понятно, но как?
...
Рейтинг: 0 / 0
Перебрать таблицы на наличие определённого номера в полях
    #39888329
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
CREATE procedure [dbo].[sp_searchint] @IntVariable int
AS
BEGIN
     SET NOCOUNT ON
     DECLARE @tbl table(table_name sysname, column_name sysname, cnt int, datatext nvarchar(max))
     DECLARE @value sysname, @table_name sysname, @column_name sysname
     DECLARE cFKey CURSOR LOCAL FOR select TABLE_NAME, COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS  where DATA_TYPE in ('int', 'numeric')
     OPEN cFKey
     FETCH NEXT FROM cFKey INTO @table_name, @column_name
     WHILE @@FETCH_STATUS = 0
         BEGIN
            DECLARE @cnt int = 0;
            DECLARE @ParmDefinition nvarchar(64)= N'@value int, @cntout int OUTPUT';
            DECLARE @SQLString nvarchar(500) = 'select @cntout =count(*) from ' + @table_name + ' where ' + @column_name + ' = @value'
            EXECUTE sp_executesql @SQLString, @ParmDefinition, @value = @IntVariable, @cntout = @cnt OUTPUT
            IF @cnt > 0 
            BEGIN
                declare @result nvarchar(max);
                exec sp_makerow @table_name, @column_name, @IntVariable, @result out        
                INSERT INTO @tbl (table_name, column_name , cnt, datatext) values (@table_name, @column_name, @cnt, @result)
            END
	    FETCH NEXT FROM cFKey INTO @table_name, @column_name
        END
    Close cFKey
    DeAllocate cFKey
    select * FROM @tbl
END
GO

 --  exec sp_searchint 988
...
Рейтинг: 0 / 0
Перебрать таблицы на наличие определённого номера в полях
    #39888337
Earl11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А ничего подобного не получится? Если сджоинить все таблицы, а выводить поля, в которых есть заданный ProdID
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT  M.ProdID
	,T1.ValueA   ---Вывести только 
    ,T2.ValueB	---  эти поля
	
  FROM Table_main M
  LEFT JOIN [Table1] T1 ON M.ProdID = T1.ProdID
  LEFT JOIN [Table2] T2 ON M.ProdID = T2.ProdID
LEFT JOIN [Table3] T3 ON M.ProdID = T3.ProdID
...
Рейтинг: 0 / 0
Перебрать таблицы на наличие определённого номера в полях
    #39888390
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Earl11
А ничего подобного не получится? Если сджоинить все таблицы, а выводить поля, в которых есть заданный ProdID
Разумеется, если таблицы и поля известны (если не надо писать процедуру "для любых таблиц"), то намного лучше написать простой запрос.
...
Рейтинг: 0 / 0
Перебрать таблицы на наличие определённого номера в полях
    #39888837
Earl11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,
Таблицы известны. Т.е. можно и через курсор?
...
Рейтинг: 0 / 0
Перебрать таблицы на наличие определённого номера в полях
    #39888844
Earl11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Просто как в таком случае (в случае курсора) убрать ненужные таблицы (в которых нет нужного ProdId)
Может глупые вопросы задаю, не понимаю
...
Рейтинг: 0 / 0
Перебрать таблицы на наличие определённого номера в полях
    #39888867
Earl11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос решился

Спасибо Lepsik за часть кода, не заметил

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
declare @a nvarchar(max), @b nvarchar(max), @c int = 0, @in nvarchar(max) =''
declare curs cursor for
SELECT table_name FROM INFORMATION_SCHEMA.COLUMNS
WHERE column_name = 'ProdId'
set @b = ''
open curs 
fetch next from curs
into @a
declare @Par nvarchar(max)= '@co int OUTPUT'
while @@FETCH_STATUS = 0
begin
	
	set @b  = '  Select @co =count(*) from ' +@a+ ' WHERE ProdId= 1
' 
exec sp_executesql @b, @Par, @co= @c OUTPUT

if @c>0 begin
set @in = @in+@a+' '

end
	
	fetch next from curs
	into @a
end 

close curs
deallocate curs

print @in
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Перебрать таблицы на наличие определённого номера в полях
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]