Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Перебрать таблицы на наличие определённого номера в полях / 9 сообщений из 9, страница 1 из 1
12.11.2019, 22:27
    #39888300
Earl11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать таблицы на наличие определённого номера в полях
Здравствуйте. Вопрос в следующем - имеется список таблиц, в каждой из этих таблиц имеется одноимённое поле. Можно ли как-то перебрать (в цикле или нет) все эти поля на наличие определённого номера?
Т.е. нужен, например, ProdID = 5, в результате получить все значения (ValueA, ValueB)
...
Рейтинг: 0 / 0
12.11.2019, 23:37
    #39888314
Remind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать таблицы на наличие определённого номера в полях
dynamic sql
...
Рейтинг: 0 / 0
13.11.2019, 00:24
    #39888328
Earl11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать таблицы на наличие определённого номера в полях
Понятно, но как?
...
Рейтинг: 0 / 0
13.11.2019, 00:25
    #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
13.11.2019, 00:55
    #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
13.11.2019, 08:46
    #39888390
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать таблицы на наличие определённого номера в полях
Earl11
А ничего подобного не получится? Если сджоинить все таблицы, а выводить поля, в которых есть заданный ProdID
Разумеется, если таблицы и поля известны (если не надо писать процедуру "для любых таблиц"), то намного лучше написать простой запрос.
...
Рейтинг: 0 / 0
13.11.2019, 22:53
    #39888837
Earl11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать таблицы на наличие определённого номера в полях
alexeyvg,
Таблицы известны. Т.е. можно и через курсор?
...
Рейтинг: 0 / 0
13.11.2019, 23:33
    #39888844
Earl11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать таблицы на наличие определённого номера в полях
Просто как в таком случае (в случае курсора) убрать ненужные таблицы (в которых нет нужного ProdId)
Может глупые вопросы задаю, не понимаю
...
Рейтинг: 0 / 0
14.11.2019, 01:23
    #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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Перебрать таблицы на наличие определённого номера в полях / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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