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

Откуда:
Сообщений: 22
Коллеги, приветствую!

Объясните пожалуйста мне, неразумному.
Пытаюсь создать таблицу как копию существующей.
В чем принципиальная разница между способами?


IF OBJECT_ID('qqq') IS NOT NULL DROP TABLE qqq
SELECT * INTO qqq FROM  [ExcelAnalysis].[dbo].[new]


IF OBJECT_ID('[ExcelAnalysis].[dbo].[qqq]') IS NOT NULL DROP TABLE [ExcelAnalysis].[dbo].[qqq]
SELECT * INTO [ExcelAnalysis].[dbo].[qqq] FROM  [ExcelAnalysis].[dbo].[new]


Если все-таки таблицу создать в базе, например вручную,
то обе таблицы будут жить своей жизнью

и 2 варианта дадут разные результаты.

SELECT *
FROM qqq

SELECT *
FROM [ExcelAnalysis].[dbo].[qqq]
26 май 17, 01:59    [20513307]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы в запросе  [new]
Maximusu
Member

Откуда:
Сообщений: 22
Выполнив на чистой базе такой код первый раз
IF OBJECT_ID('qqq') IS NOT NULL DROP TABLE qqq
SELECT * INTO qqq FROM  [ExcelAnalysis].[dbo].[new]

SELECT * INTO [ExcelAnalysis].[dbo].[qqq] FROM  [ExcelAnalysis].[dbo].[new]


получаю:
(строк обработано: 199192)
(строк обработано: 199192)

Второй запуск того же кода рождает ошибку:

Сообщение 2714, уровень 16, состояние 6, строка 5
В базе данных уже существует объект с именем "qqq".

Внимание вопрос. Хде находится каждая из таблиц qqq?
Логично предположить, что [ExcelAnalysis].[dbo].[qqq] находится в основной базе
Где же тогда просто qqq ?

Заранее благодарен.
26 май 17, 02:08    [20513308]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы в запросе  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36694
Надо просто осознать, что наличие таблицы, в которую идет select ... into, проверяется на этапе компиляции, а не выполнения.
26 май 17, 02:38    [20513319]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы в запросе  [new]
Maximusu
Member

Откуда:
Сообщений: 22
Гавриленко Сергей Алексеевич
Надо просто осознать, что наличие таблицы, в которую идет select ... into, проверяется на этапе компиляции, а не выполнения.


Ммм раньше почему-то думал, что в sql это одно и то же.
Ну даже если это так, хде живёт вторая таблица-то ?
Она ведь есть, она постоянная и доступна для запросов. Но я ее не вижу в структуре базы визуально(в студии)
26 май 17, 07:22    [20513372]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы в запросе  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30776
Maximusu
и 2 варианта дадут разные результаты.

SELECT *
FROM qqq

SELECT *
FROM [ExcelAnalysis].[dbo].[qqq]
В первом случае таблица qqq создана в текущей базе в неизвестной схеме.
А во втором случае таблица qqq создана в базе ExcelAnalysis в схеме dbo.

Всегда пишите имя схемы.
26 май 17, 08:28    [20513423]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы в запросе  [new]
aleksrov
Member

Откуда:
Сообщений: 948
Maximusu
Гавриленко Сергей Алексеевич
Надо просто осознать, что наличие таблицы, в которую идет select ... into, проверяется на этапе компиляции, а не выполнения.


Ммм раньше почему-то думал, что в sql это одно и то же.
Ну даже если это так, хде живёт вторая таблица-то ?
Она ведь есть, она постоянная и доступна для запросов. Но я ее не вижу в структуре базы визуально(в студии)


Это разные этапы. Запрос выполняется когда он прошел 3 этапа перед выполнением, проверка существования обьектов идет на 2 этапе, binding. https://www.codeproject.com/Articles/630346/Understanding-how-SQL-Server-executes-a-query
Елси у вас есть такая таблица, в студии она должна показываться.
У каждого пользователья есть схема по умолчанию, когда вы создали таблицу без указания схемы она создалась там, с указанием схемы, там где вы написали.
Как написали выше, всегда указывайте схему.
26 май 17, 08:44    [20513442]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы в запросе  [new]
Focha
Member

Откуда: Москва
Сообщений: 496
[quot alexeyvg]
Maximusu

Всегда пишите имя схемы.


Поддерживаю!


Ещё в начале если не указываешь схему, выбери хотя бы базу

USE ExcelAnalysis;
26 май 17, 09:24    [20513504]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы в запросе  [new]
TaPaK
Member

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

как об стенку горохом. Выбор базы не спасёт на 100%. Наоборот более правильно писать хотя-бы! схему
26 май 17, 09:26    [20513508]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы в запросе  [new]
Maximusu
Member

Откуда:
Сообщений: 22
Друзья, я все понимаю, грамотное программирование и все такое.
Но это-ж капец как замучаешься писать каждый раз схему.

Можете закидать меня камнями, но может просто четко прописать дефолтную схему?

К такому выводу пришел, просто пока нет доступа к базе попробовать

Базы данных->Имена входов-> <твое имя> -> Схема по умолчанию

Это должно вылечить?
26 май 17, 11:34    [20514049]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы в запросе  [new]
TaPaK
Member

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

автор
Это должно вылечить?

нет шансов вас вылечить
26 май 17, 11:42    [20514092]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы в запросе  [new]
Maximusu
Member

Откуда:
Сообщений: 22
Аватар надо менять.
На Дрю из "гадкого я"
26 май 17, 11:59    [20514198]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы в запросе  [new]
aleksrov
Member

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

А еще надо писать *, это скока времени потратишь пока все поля нужные напечатаешь.
Есть правила как должен писаться код. Есть требования чисто для удобства, типа всегда писать as, а не через пробел давать новое имя, а есть правила которые напрямую влияют на производительность, так и на результат, который вы получите.
Вот, специально для вас https://www.simple-talk.com/blogs/why-you-should-always-use-schema-name-in-queries/,
+ к тому что написано там, просто подумайте логически какие у вас могут быть ошибки если у вас есть 2 обьекта с одинаковым именем и разными схемами, а вы выполняете запрос без указания схемы.
26 май 17, 12:08    [20514246]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы в запросе  [new]
aleksrov
Member

Откуда:
Сообщений: 948
Maximusu
Аватар надо менять.
На Дрю из "гадкого я"


Нет, просто вы давно могли посмотреть в гугле почему надо использовать схему, а не писать "ну ваще непонятно".
26 май 17, 12:12    [20514262]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы в запросе  [new]
Maximusu
Member

Откуда:
Сообщений: 22
Друзья!

Что-то даже от уважаемых участников я давненько не видел примеров кода,
где явно указана схема.

Прямо вот совсем не встречал последнее время.

Граждане, давайте без флудеризма, вопрос прямой:

Установив для пользователя схему по-умолчанию
корректно ли обращение к таблице без ее указания?
26 май 17, 12:21    [20514299]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы в запросе  [new]
TaPaK
Member

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

если я найду у себя в >2k фалов объектов код без схемы, я расстроюсь и допишу
26 май 17, 12:24    [20514310]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы в запросе  [new]
aleksrov
Member

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

I give up! I'm done. I can't take it anymore
26 май 17, 12:24    [20514314]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы в запросе  [new]
Maximusu
Member

Откуда:
Сообщений: 22
Точнее, предвидя ..., переформулирую:
волне ли допустимо указать схему в дефолтных настройках, а не указывать ее каждый раз
26 май 17, 12:26    [20514326]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы в запросе  [new]
TaPaK
Member

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

а потом вы захотите разнести по разным схемам объекты и что? тогда начнёте писать?
26 май 17, 12:29    [20514336]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы в запросе  [new]
o-o
Guest
Maximusu
Точнее, предвидя ..., переформулирую:
волне ли допустимо указать схему в дефолтных настройках, а не указывать ее каждый раз

это даже физически не всегда возможно.
например, у нас все логины это виндовые группы.
и вплоть до 2012-ого сервера просто невозможно назначить юзеру-группе дефолтную схему.
а любой юзер из этой группы, создавая объект без явного указания схемы,
создает его в схеме = виндовая учетка.
наши юзеры давно приучились писать схему в явном виде,
ибо как только один создаст в "своей" схеме, сразу остальным вываливается несуществующий объект при обращении,
ибо проверяется дефолтная схема юзера (а у всех виндовых своя схема, равная учетке) и потом dbo.
и не находит ни там, ни там
26 май 17, 12:57    [20514486]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы в запросе  [new]
Focha
Member

Откуда: Москва
Сообщений: 496
TaPaK
Focha,

как об стенку горохом. Выбор базы не спасёт на 100%. Наоборот более правильно писать хотя-бы! схему


Выбор базы спасет, что бы не засорять основную базу.
Главное это прямые руки у админов.
26 май 17, 20:10    [20516191]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы в запросе  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30776
Maximusu
Но это-ж капец как замучаешься писать каждый раз схему.
Неужели реально сложно? Не сложнее, чем делать перевод строки между операторами, или пробелы между словами. Просто вы не привыкли.
Maximusu
Установив для пользователя схему по-умолчанию
корректно ли обращение к таблице без ее указания?
Нет
Maximusu
волне ли допустимо указать схему в дефолтных настройках, а не указывать ее каждый раз
Нет
Maximusu
Что-то даже от уважаемых участников я давненько не видел примеров кода,
где явно указана схема.
Примеры - может быть
Но в рабочем коде нет ни одного написания объекта без схемы.
27 май 17, 01:33    [20516528]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить