Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Подставить имя схемы в процедуре  [new]
descent52
Member

Откуда: Саров
Сообщений: 426
Всем привет!
Мне нужно получить имена всех таблиц с полями в нужной схеме
SELECT  * FROM INFORMATION_SCHEMA.TABLES

выдаст все таблицы в текущей схеме

Выдаст всю структуру всех таблиц
SELECT * FROM INFORMATION_SCHEMA.COLUMNS


А мне нужно в процедуре получить все таблицы во всех схемах
Такое не прокатит
Declare @Tmp varchar(20)
set @Tmp='Test'
SELECT  * FROM [s]@Tmp.[/s]INFORMATION_SCHEMA.TABLES

А если я нахожусь в схеме Test1, а мне надо пробежаться по всем схемам (Test2, Test3)
Есть советы?
21 июн 17, 14:43    [20580736]     Ответить | Цитировать Сообщить модератору
 Re: Подставить имя схемы в процедуре  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36972
descent52
выдаст все таблицы в текущей схеме
Вообще-то, выдаст все таблицы в текущей БД. Имя схемы будет в поле table_schema.
21 июн 17, 14:46    [20580753]     Ответить | Цитировать Сообщить модератору
 Re: Подставить имя схемы в процедуре  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
descent52,
автор
А если я нахожусь в схеме Test1
а как это?

автор
выдаст все таблицы в текущей схеме
судя по всему у вас просто нет прав
21 июн 17, 14:48    [20580764]     Ответить | Цитировать Сообщить модератору
 Re: Подставить имя схемы в процедуре  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31356
descent52
Мне нужно получить имена всех таблиц с полями в нужной схеме
SELECT  * FROM INFORMATION_SCHEMA.TABLES


выдаст все таблицы в текущей схеме
С чего вы взяли? Это выдаст таблицы во всех схемах.

descent52
Такое не прокатит
Declare @Tmp varchar(20)
set @Tmp='Test'
SELECT  * FROM [s]@Tmp.[/s]INFORMATION_SCHEMA.TABLES

Declare @Tmp varchar(20)
set @Tmp='Test'
SELECT  * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = @Tmp
21 июн 17, 14:48    [20580765]     Ответить | Цитировать Сообщить модератору
 Re: Подставить имя схемы в процедуре  [new]
iap
Member

Откуда: Москва
Сообщений: 46979
descent52
Всем привет!
Мне нужно получить имена всех таблиц с полями в нужной схеме
SELECT  * FROM INFORMATION_SCHEMA.TABLES


выдаст все таблицы в текущей схеме

Выдаст всю структуру всех таблиц
SELECT * FROM INFORMATION_SCHEMA.COLUMNS



А мне нужно в процедуре получить все таблицы во всех схемах
Такое не прокатит
Declare @Tmp varchar(20)
set @Tmp='Test'
SELECT  * FROM [s]@Tmp.[/s]INFORMATION_SCHEMA.TABLES


А если я нахожусь в схеме Test1, а мне надо пробежаться по всем схемам (Test2, Test3)
Есть советы?
Чего-то недогонгяю. Что вы называете схемой?
INFORMATION_SCHEMA - это и есть схема. В каждой базе такая есть.
SELECT *
FROM INFORMATION_SCHEMA.TABLES T
JOIN INFORMATION_SCHEMA.COLUMNS C ON T.TABLE_SCHEMA=C.TABLE_SCHEMA AND T.TABLE_NAME=C.TABLE_NAME
WHERE T.TABLE_TYPE=N'BASE TABLE';
21 июн 17, 14:50    [20580776]     Ответить | Цитировать Сообщить модератору
 Re: Подставить имя схемы в процедуре  [new]
iap
Member

Откуда: Москва
Сообщений: 46979
Даже точнее так:
SELECT *
FROM INFORMATION_SCHEMA.TABLES T
JOIN INFORMATION_SCHEMA.COLUMNS C ON T.TABLE_CATALOG=C.TABLE_CATALOG AND T.TABLE_SCHEMA=C.TABLE_SCHEMA AND T.TABLE_NAME=C.TABLE_NAME
WHERE T.TABLE_TYPE=N'BASE TABLE';
В WHERE можно добавить по вкусу условие отбора по схеме таблицы.
Или обратиться к INFORMATION_SCHEMA другой базы:
[База Данных].INFORMATION_SCHEMA
21 июн 17, 14:54    [20580797]     Ответить | Цитировать Сообщить модератору
 Re: Подставить имя схемы в процедуре  [new]
descent52
Member

Откуда: Саров
Сообщений: 426
извините, может не понятно выразился (((

Мне надо получить структуру всех таблиц в определенной схеме(псевдонимы).
Это структура таблиц в текущей схеме, например Test1
SELECT * FROM INFORMATION_SCHEMA.COLUMNS


Но кроме схемы(псевдонима) Test1 есть ещё, например, Northwint.
Как мне сваять процедуру в Test1, использую что то типа такого
set @Tmp='Northwint'
SELECT  * FROM [s]@Tmp.[/s]INFORMATION_SCHEMA.TABLES

чтобы получить структуру всех таблиц в Northwint. Имя схемы(псевдонима) в процедуру отправить в виде параметра
21 июн 17, 14:58    [20580822]     Ответить | Цитировать Сообщить модератору
 Re: Подставить имя схемы в процедуре  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
descent52,

а, то вы ещё понятие "база" не узнали. Динамический запрос, ваш вариант
21 июн 17, 15:00    [20580836]     Ответить | Цитировать Сообщить модератору
 Re: Подставить имя схемы в процедуре  [new]
descent52
Member

Откуда: Саров
Сообщений: 426
iap, Ваш запрос выдаст структуру таблиц в текущей схеме (псевдониме),
а мне надо из другой((
21 июн 17, 15:01    [20580843]     Ответить | Цитировать Сообщить модератору
 Re: Подставить имя схемы в процедуре  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
descent52
iap, Ваш запрос выдаст структуру таблиц в текущей схеме (псевдониме),
а мне надо из другой((

пациент упорно всё называет схемами...
21 июн 17, 15:03    [20580849]     Ответить | Цитировать Сообщить модератору
 Re: Подставить имя схемы в процедуре  [new]
descent52
Member

Откуда: Саров
Сообщений: 426
TaPaK, давай так, напиши мне ДИНАМИЧЕСКИЙ запрос, формирующий структуру БАЗЫ ДАННЫХ Northwint
21 июн 17, 15:03    [20580852]     Ответить | Цитировать Сообщить модератору
 Re: Подставить имя схемы в процедуре  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
descent52
TaPaK, давай так, напиши мне ДИНАМИЧЕСКИЙ запрос, формирующий структуру БАЗЫ ДАННЫХ Northwint

а если не напишу - накажешь?

DECLARE @DB NVARCHAR(50)= 'master'
EXEC('SELECT  * FROM ' + @Db + '.INFORMATION_SCHEMA.TABLES')
21 июн 17, 15:04    [20580858]     Ответить | Цитировать Сообщить модератору
 Re: Подставить имя схемы в процедуре  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
descent52,

sys.sp_MSforeachdb 'use ?; SELECT  * FROM INFORMATION_SCHEMA.TABLES'
21 июн 17, 15:07    [20580870]     Ответить | Цитировать Сообщить модератору
 Re: Подставить имя схемы в процедуре  [new]
descent52
Member

Откуда: Саров
Сообщений: 426
TaPaK, не накажу, спасибо скажу.

DECLARE @DB NVARCHAR(50)= 'master'
EXEC('SELECT  * FROM ' + @Db + '.INFORMATION_SCHEMA.TABLES')


Это мне понятно. Пробовал
То есть через указатель, ссылку на переменную или что то подобное
SELECT  * FROM [s]@Tmp.[/s]INFORMATION_SCHEMA.TABLES 

мне такое не сляпать?
У меня там селект большой , не совсем хочется возиться со всеми ' "+','"
21 июн 17, 15:15    [20580908]     Ответить | Цитировать Сообщить модератору
 Re: Подставить имя схемы в процедуре  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36972
descent52
iap, Ваш запрос выдаст структуру таблиц в текущей схеме (псевдониме),
а мне надо из другой((
Я вам настоятельно рекомендую вырваться из вашей реальности и перестать называть базы данных схемами. Тогда, глядишь, вас и понимать начнут.
21 июн 17, 15:17    [20580914]     Ответить | Цитировать Сообщить модератору
 Re: Подставить имя схемы в процедуре  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
descent52,
автор
У меня там селект большой , не совсем хочется возиться со всеми ' "+','"
а вдруг война а я уставший, так?
21 июн 17, 15:19    [20580925]     Ответить | Цитировать Сообщить модератору
 Re: Подставить имя схемы в процедуре  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ну и угадывая, зачем вам всё это надо: написать абсолютно ненужную вещь, которую уже написали тыщу раз падаваны добравшиеся до sql
21 июн 17, 15:21    [20580929]     Ответить | Цитировать Сообщить модератору
 Re: Подставить имя схемы в процедуре  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7762
descent52,

автор
А если я нахожусь в схеме Test1, а мне надо пробежаться по всем схемам (Test2, Test3)


если нет прав на Test2, Test3, то никак.

Представление отображает все столбцы во всех доступных схемах.

SELECT  * FROM [s]@Tmp.[/s]INFORMATION_SCHEMA.TABLES


Вы написали чепуху: схема.схема.имя
21 июн 17, 15:22    [20580934]     Ответить | Цитировать Сообщить модератору
 Re: Подставить имя схемы в процедуре  [new]
descent52
Member

Откуда: Саров
Сообщений: 426
Хорошо, у меня 20 баз данных. В них суммарно >1000 таблиц.
Хочу, находясь в одной базе данных, получить структуру всех баз данных с таблицами
Ну или структуру всех таблиц из одной базы данных
21 июн 17, 15:24    [20580940]     Ответить | Цитировать Сообщить модератору
 Re: Подставить имя схемы в процедуре  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
descent52
Хорошо, у меня 20 баз данных. В них суммарно >1000 таблиц.
Хочу, находясь в одной базе данных, получить структуру всех баз данных с таблицами
Ну или структуру всех таблиц из одной базы данных

и чахнуть над этим добром как владычица морская
21 июн 17, 15:25    [20580946]     Ответить | Цитировать Сообщить модератору
 Re: Подставить имя схемы в процедуре  [new]
descent52
Member

Откуда: Саров
Сообщений: 426
Вот я нахожусь в любой из баз данных и получаю список всех баз данных
SELECT A.catalog_name FROM INFORMATION_SCHEMA.SCHEMATA A

и теперь хочу привязать структуру базы Northwint
21 июн 17, 15:27    [20580950]     Ответить | Цитировать Сообщить модератору
 Re: Подставить имя схемы в процедуре  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
descent52,

давай уже следующее желание, предыдущее выполнили.

ps Northwint северныйчто?
21 июн 17, 15:31    [20580956]     Ответить | Цитировать Сообщить модератору
 Re: Подставить имя схемы в процедуре  [new]
descent52
Member

Откуда: Саров
Сообщений: 426
Да этот Northwint вместе с sql2000 идет.
По ходу надо как то в процедуре установить (сделать текущей) базу Northwint
В запросе это USE Northwint, а в процедуре это нельзя делать.
Куда ехать дальше то?
21 июн 17, 15:34    [20580964]     Ответить | Цитировать Сообщить модератору
 Re: Подставить имя схемы в процедуре  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
descent52,

20580858 или 20580870
21 июн 17, 15:35    [20580969]     Ответить | Цитировать Сообщить модератору
 Re: Подставить имя схемы в процедуре  [new]
descent52
Member

Откуда: Саров
Сообщений: 426
Minamoto,

sys.sp_MSforeachdb 'use ?; SELECT  * FROM INFORMATION_SCHEMA.TABLES'


А что это такое и с чем его есть? Но выдало всё!!!!
21 июн 17, 15:43    [20580990]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить