У чому сенс WHERE 1 = 2 для запиту SELECT INTO таблиці


39

Якщо ми хочемо створити нову таблицю з існуючої в SQL Server, ми можемо зробити наступне

SELECT * into Table2
from Table1
WHERE 1=2

У чому сенс де застереження? Я спробував це без пункту де, і це нормально побігло. Я бачив це там, де в багатьох прикладах в Інтернеті застереження, але не причина, чому це потрібно.

Відповіді:


54

Причина, що ви ставите WHERE 1=2в цьому SELECT INTOзапиті, полягає у створенні польової копії наявної таблиці без даних .

Якщо ви зробили це:

select *
into Table2
from Table1

Table2буде точним дублікатом Table1, включаючи рядки даних. Але якщо ви не хочете, щоб дані, що містяться у вас Table1, і ви просто хочете структуру таблиці, ви кладете WHEREпункт про фільтрацію всіх даних.

BOL SELECT INTOДовідкова цитата:

SELECT… INTO створює нову таблицю в групі файлів за замовчуванням і вставляє в неї отримані рядки із запиту.

Якщо у вашому WHEREпункті немає рядків, що виникають у результаті, жодна з них не буде вставлена ​​в нову таблицю: отже, ви отримуєте дублікатну схему вихідної таблиці без даних (який був би бажаним результатом у цьому випадку).

Такого ж ефекту можна досягти TOP (0), наприклад:

select top (0) *
into Table2
from Table1;

Примітка : The SELECT INTOне буде дублювати індекси, обмеження, тригери або схему розділів таблиці вихідної таблиці.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.