Я надеюсь, что этот вопрос будет немного лучше, чем аналогичный Создайте таблицу без столбцов . Да, я спрашиваю о чем-то, что больше всего покажется бессмысленным академическим.
Легко получить результат SELECT с 0 строками (но со столбцами), например SELECT a = 1 WHERE 1 = 0
.
Можно ли получить результат SELECT с 0 столбцами (но со строками)? например. что-то вроде SELECT NO COLUMNS FROM Foo
. (Это недопустимый T-SQL.)
Я сталкивался с этим, потому что хотел вставить несколько строк без указания каких-либо данных столбца для какой-либо из них. например (SQL Server 2005)
CREATE TABLE Bar (id INT NOT NULL IDENTITY PRIMARY KEY)
INSERT INTO Bar SELECT NO COLUMNS FROM Foo
-- Invalid column name 'NO'.
-- An explicit value for the identity column in table 'Bar' can only be specified when a column list is used and IDENTITY_INSERT is ON.
Можно вставить одну строку без указания каких-либо данных столбца, например, INSERT INTO Foo DEFAULT VALUES
.
Можно запросить количество строк (без извлечения фактических данных столбца из таблицы), например, SELECT COUNT(*) FROM Foo
. (Но у этого результирующего набора, конечно, есть столбец.)
Я пробовал что-то вроде
INSERT INTO Bar () SELECT * FROM Foo
-- Parameters supplied for object 'Bar' which is not a function.
-- If the parameters are intended as a table hint, a WITH keyword is required.
и
INSERT INTO Bar DEFAULT VALUES SELECT * FROM Foo
-- which is a standalone INSERT statement followed by a standalone SELECT statement.
Я могу делать то, что мне нужно, по-другому, но очевидное отсутствие последовательности в поддержке вырожденных случаев меня удивляет.
Я прочитал соответствующие разделы BOL и ничего не увидел. Я был удивлен, что тоже ничего не нашел через Google.