T-SQL, курсоры, FETCH INTO. Как использовать SELECT * - PullRequest
1 голос
/ 17 июня 2009

Я строю одноразовый запрос, чтобы выполнить итерацию по множеству объединенных таблиц. Оператор выбора использует «SELECT *». Поскольку это таблица с множеством полей, я не хочу указывать каждый столбец как переменную. Есть ли способ получить в массив или SET какого-то рода и просто получить значения, которые я хочу?

Ответы [ 6 ]

3 голосов
/ 17 июня 2009

Очевидно, нет :

INTO @variable_name[ ,...n]

"Позволяет помещать данные из столбцов выборки в локальные переменные.
Каждая переменная в списке, слева направо, связана с соответствующим столбцом в наборе результатов курсора. Тип данных каждой переменной должен совпадать или быть поддерживаемым неявным преобразованием типа данных соответствующего столбца набора результатов. Количество переменных должно соответствовать количеству столбцов в списке выбора курсора. "


Если вы хотите использовать курсоры, вы можете добиться большей гибкости с помощью CLR Хранимые процедуры

1 голос
/ 17 июня 2009

В 2k5 (SQL 2000 имеет различные системные объекты), используйте метаданные SQL для быстрой записи запросов с длинными списками имен таблиц / столбцов:

SELECT
    O.Name + '__' + C.Name + ' = ' + O.Name + '.' + C.Name + ','
FROM Sys.Objects O
JOIN Sys.Columns C
    ON C.Object_Id = O.Object_Id
WHERE O.Name IN ('Table1', 'Table1')
ORDER BY O.Name, C.Column_Id

Я не уверен, что именно вы пытаетесь сделать с набором результатов, но это может быть неплохим началом.

Кроме того, вы можете объявить переменные как результирующие наборы SQL_VARIANT и FETCH, например:

DECLARE @Col1 SQL_VARIANT

SELECT @Col1 = Table1.Column1 FROM Table1

PRINT CONVERT(varchar(max), @Col1)

Хотя я не уверен, что это тебе дает.

1 голос
/ 17 июня 2009

Зачем вам нужен курсор? Они не одобряются в сценариях SQL Server - в большинстве случаев они не нужны, и обычно они очень медленные и снижают производительность.

Что вы пытаетесь достичь с помощью курсора? Не могли бы вы сделать это на основе набора и максимально использовать возможности SQL Server ??

Марк

1 голос
/ 17 июня 2009

Даже если бы это было так, вы бы этого не хотели. Извлечение дополнительных полей является одной из наиболее распространенных причин снижения производительности в приложении SQL Server. Тем самым вы ограничиваете возможность оптимизатора эффективно использовать индексы.

Как бы вы предложили "захватить нужные значения" без указания имен столбцов?

0 голосов
/ 18 июня 2009

В SQL2005 вы также можете щелкнуть правой кнопкой мыши по таблице и выбрать открытую таблицу. Затем вы нажимаете маленькую иконку SQL и видите оператор выбора, что-то вроде select * из YourTable. При повторном нажатии на! -Icon выбор * из будет расширен до полного списка полей. Удачи.

0 голосов
/ 17 июня 2009

Это предлагается только для тех, кто ежедневно работает с SQL, а не специально для ответа на этот вопрос.

Продукт RedGate Подсказка SQL имеет возможность расширять символы подстановки в отдельные имена полей с помощью сочетаний клавиш (Ctrl-B, Ctrl-W). Это может сэкономить вам много времени и упростить удаление нескольких полей из запроса в тех случаях, когда вам нужно большинство из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...