Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Return table in one row. 
:(
    Опции темы
NURMS
Дата 28.10.2008, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 20.4.2007

Репутация: нет
Всего: нет



Народ привет.

Когда, к примеру, 
Код

SELECT Col_1 FROM Table_1
 возвращает таблицу, то можно ли как-нибудь содержимое талицы вернуть в одном ROW, т.е. конкатенацию всех ячеек табицы. Но не используя курсоров?

Добавлено через 12 минут и 54 секунды
Ах да, использовать это надо для инсерта.
PM MAIL   Вверх
comtat
Дата 29.10.2008, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

Репутация: 1
Всего: 71



можно 
Код
SELECT CAST(Col_1 as varchar) + ',' + CAST(Col_2 as varchar) + ... + CAST(Col_n as varchar)  FROM Table_1

только если значение поля может содержать NULL необходимо делать проверку ISNULL
также данный вариант не подойдет если есть поля типа TEXT

не лучше ли делать так 
Код

INSERT INTO Table_2 (Col_1, Col_2, ... , Col_n)  SELECT Col_1, Col_2, ... , Col_n FROM Table_1



--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
boevik
Дата 30.10.2008, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 15
Всего: 35



Цитата(NURMS @ 28.10.2008,  17:31)
Народ привет.

Когда, к примеру, 
Код

SELECT Col_1 FROM Table_1
 возвращает таблицу, то можно ли как-нибудь содержимое талицы вернуть в одном ROW, т.е. конкатенацию всех ячеек табицы. Но не используя курсоров?

Если я правильно понял, то вместо нескольких записей с одним полем надо вернуть 1-у запись со всеми значениями col1?
Предлагаю такой вариант:
Код

create function dbo.col2row ()
returns varchar(1000)
as
begin
declare @lname varchar(100)
declare @lnames varchar(1000)
set @lnames = ''

DECLARE employees_cursor CURSOR FOR
SELECT lastname FROM Employees

OPEN employees_cursor

-- Perform the first fetch.
FETCH NEXT FROM employees_cursor INTO @lname

-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
   set @lnames = @lnames + @lname + ', '
   -- This is executed as long as the previous fetch succeeds.
   FETCH NEXT FROM employees_cursor INTO @lname
END

CLOSE employees_cursor
DEALLOCATE employees_cursor

return @lnames 
end

Код


select dbo.col2row()



--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
NURMS
Дата 30.10.2008, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 20.4.2007

Репутация: нет
Всего: нет



Да, так тоже можно, но когда кол-во строк в таблице лимоны эти курсоры дико тормозят. К тому же можно просто так: 

Код

DECLARE @ReportText VARCHAR(MAX)
SET @ReportText = ''

SELECT @ReportText = @ReportText + Col_01
        FROM Table_01

...



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0598 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.