Может быть, что-то подобное сделало бы работу тоже?
class Test<T> {
public Test(Proxy<T> proxy) { this.MyProxy = proxy; }
public Proxy<T> MyProxy { get; private set; }
}
Что ж, лучше всего указывать, какие столбцы вы хотите, вместо того, чтобы просто указывать *. Таким образом, вы должны просто указать, какие поля вы хотите, чтобы ваш выбор возвращал.
нет, нет способа сделать это. возможно, вы можете создать собственные представления, если это возможно в вашей ситуации.
РЕДАКТИРОВАТЬ Может быть, если ваша БД поддерживает выполнение динамического SQL, вы могли бы написать SP и передать столбцы, которые вы не хотите видеть, и позволить этому создать запрос динамически и вернуть результат вам. Я думаю, что это выполнимо в SQL Server по крайней мере
You could create a view that has the columns you wish to select, then you can just select *
from the view...
Как и у других сказал, что нет способа сделать это, но если вы используете Sql Server, я использую трюк, чтобы изменить вывод на разделенные запятыми, затем выполните
select top 1 * from table
и вырежьте весь список столбцов из окна вывода. Затем вы можете выбрать нужные столбцы, не вводя их все.
По сути, вы не можете делать то, что хотели бы, - но вы можете получить правильные инструменты, которые помогут вам сделать вещи немного проще.
Если вы посмотрите на SQL-запрос Red-Gate , вы можете набрать «SELECT * FROM MyTable», а затем переместить курсор назад после «*» и нажать
Это не идеальное решение, но чертовски хорошее! :-) Жаль, что Intellisense в MS SQL Server Management Studio все еще недостаточно интеллектуален, чтобы предлагать эту функцию .......
Marc
Я не знаю ни одной базы данных, которая бы поддерживала это (SQL Server, MySQL, Oracle, PostgreSQL). Это определенно не является частью стандартов SQL, поэтому я думаю, что вы должны указывать только те столбцы, которые вам нужны.
Конечно, вы можете динамически построить оператор SQL и заставить его выполнить сервер. Но это открывает возможность для инъекции SQL.
Нет.
Лучшая практика для техобслуживания - указывать только необходимые столбцы.
Не менее 2 причины:
Редактировать (июль 2011 г.):
Если вы перетащите из Object Explorer узел Columns
для таблицы, он поместит список столбцов CSV в окне запросов для вас, которое достигает одной из ваших целей
Если Вы хотите исключить чувствительный столбец случая как пароль, например, я делаю это для сокрытия значения:
SELECT * , "" as password FROM tableName;
Современный диалект SQL как BigQuery предлагает отличное решение
ВЫБОР * КРОМЕ (ColumnNameX, [ColumnNameY...])
Это - очень мощный синтаксис SQL для предотвращения длинного списка столбцов, которые должны быть обновлены все время из-за смен имени столбца таблицы. И эта функциональность отсутствует в текущей реализации SQL Server, которая является жалостью. Хотелось бы надеяться, однажды, Microsoft Azure будет большим количеством дружелюбного специалиста по обработке и анализу данных.
Специалистам по обработке и анализу данных нравится мочь иметь быструю опцию сократить запрос и смочь удалить некоторые столбцы (из-за дублирования или любой другой причины).
https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#select-modifiers
Я согласен со всеми ... но если бы я собирался сделать что-то подобное, я мог бы сделать это так:
/* Get the data into a temp table */
SELECT * INTO #TempTable
FROM YourTable
/* Drop the columns that are not needed */
ALTER TABLE #TempTable
DROP COLUMN ColumnToDrop
/* Get results and drop temp table */
SELECT * FROM #TempTable
DROP TABLE #TempTable
Да, это возможно (но не рекомендуется).
CREATE TABLE contact (contactid int, name varchar(100), dob datetime)
INSERT INTO contact SELECT 1, 'Joe', '1974-01-01'
DECLARE @columns varchar(8000)
SELECT @columns = ISNULL(@columns + ', ','') + QUOTENAME(column_name)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'contact' AND COLUMN_NAME <> 'dob'
ORDER BY ORDINAL_POSITION
EXEC ('SELECT ' + @columns + ' FROM contact')
Объяснение кода :
SELECT @variable = @variable + ... FROM
, чтобы объединить имена столбцов
. Этот тип SELECT
не возвращает набор результатов. Возможно, это недокументированное поведение, но работает во всех версиях SQL Server. В качестве альтернативы вы можете использовать SET @variable = (SELECT ... FOR XML PATH (''))
для объединения строк. ISNULL
для добавления запятой, только если это не
имя первого столбца.
Используйте функцию QUOTENAME
для поддержки пробелов и пунктуация в названиях столбцов. WHERE
, чтобы скрыть столбцы, которые мы не хотим видеть. EXEC (@variable)
, также известный как динамический SQL , для разрешения имен столбцов
во время выполнения. Это необходимо, потому что мы не знаем имена столбцов во время компиляции. Таким образом, вы не можете этого сделать, но я не согласен со всеми вышеприведенными комментариями, «существуют» сценарии, в которых вы можете законно использовать * {{1 }} Когда вы создаете вложенный запрос, чтобы выбрать определенный диапазон из всего списка (например, разбиение на страницы), почему в мире нужно указывать каждый столбец во внешнем операторе выбора, когда вы сделали это во внутреннем?
В SQL Management Studio можно развернуть столбцы в обозревателе объектов, а затем перетащить элемент дерева Столбцы
в окно запроса, чтобы получить список столбцов, разделенных запятыми.
Нет, нет никакого способа сделать это, и нет веских причин для этого.
При выборе данных вы никогда не должны использовать *
, вы всегда должны указывать нужные поля. Причина в том, что вы хотите, чтобы запрос работал так же, даже если позже вы добавите еще одно поле в таблицу. Также вы указываете порядок полей в результате, чтобы перестановка полей в таблице не изменила результат.
То же самое, конечно, применимо к *, за исключением
, если это было возможно сделать.
При использовании PHP, Вы просто делаете свой запрос, и затем можно сбросить определенный элемент:
$sql = "SELECT * FROM ........ your query";
$result = $conection->query($sql); // execute your query
$row_cnt = $result->num_rows;
if ($row_cnt > 0) {
while ($row = $result->fetch_object()) {
unset($row->your_column_name); // Exclude column from your fetch
$data[] = $row;
}
echo json_encode($data); // or whatever
В зависимости от размера вашей таблицы вы можете экспортировать ее в Excel и транспонировать, чтобы получить новую таблицу, в которой столбцы исходной таблицы будут строками в новой таблице. Затем верните его в свою базу данных SQL, выберите строки в соответствии с условием и вставьте их в другую новую таблицу. Наконец, экспортируйте эту новую таблицу в Excel и сделайте еще одно транспонирование, чтобы получить желаемую таблицу и вернуть ее в свою базу данных SQL.
Не уверен, что перенос можно выполнить в базе данных SQL, если да, то это будет еще проще.
Джефф