[MS SQL] Odpowiednik sybasowego LIST
S. - 24-01-2007 00:02
[MS SQL] Odpowiednik sybasowego LIST
Witam, czy w MSSQL jest cos takiego jak odpowiednik LIST z sybase? Czyli wbudowana f-cja, która zwraca listę wartości oddzieloną przecinkami? Np. SELECT LIST( NAZWA_UZ ) FROM UZYTKOWNICY zwroci jeden wiersz z nazwami uzytkownikow przedzielonymi przecinkiem.
Pozdrawiam, S.
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Grzesiek G. - 24-01-2007 00:02
S. napisał(a): > Witam, czy w MSSQL jest cos takiego jak odpowiednik LIST z sybase? Czyli > wbudowana f-cja, która zwraca listę wartości oddzieloną przecinkami? Np. SELECT > LIST( NAZWA_UZ ) FROM UZYTKOWNICY zwroci jeden wiersz z nazwami uzytkownikow > przedzielonymi przecinkiem. > > > Pozdrawiam, S. > AIK nie.
Pozdrawiam
-- Grzegorz Gruza Odpowiadając usuń "spamerom_nie." z adresu!!!
Marcin A. Guzowski - 24-01-2007 00:02
S. napisał(a): > Witam, czy w MSSQL jest cos takiego jak odpowiednik LIST z sybase? Czyli > wbudowana f-cja, która zwraca listę wartości oddzieloną przecinkami? Np. SELECT > LIST( NAZWA_UZ ) FROM UZYTKOWNICY zwroci jeden wiersz z nazwami uzytkownikow > przedzielonymi przecinkiem.
Nie ma. W MSSQLu takie rzeczy piszemy sobie sami.
-- Pozdrawiam, Marcin Guzowski http://guzowski.info
Gsue - 24-01-2007 00:02
Użytkownik "S." <sylseb@poczta.onet.pl> napisał w wiadomości news:4e54.000000da.45b61a6c@newsgate.onet.pl... > Witam, czy w MSSQL jest cos takiego jak odpowiednik LIST z sybase? Czyli > wbudowana f-cja, która zwraca listę wartości oddzieloną przecinkami? Np. > SELECT > LIST( NAZWA_UZ ) FROM UZYTKOWNICY zwroci jeden wiersz z nazwami > uzytkownikow > przedzielonymi przecinkiem. > > > Pozdrawiam, S. > > -- > Wysłano z serwisu OnetNiusy: http://niusy.onet.pl Witaj, AFAIK nie. Kłania się kursor i ręczne oprogramowanie.
Pozdrawiam Gsue
Grzegorz Danowski - 25-01-2007 00:01
"Gsue" <gsue44@wp.pl> wrote in message news:ep5q3f$h9b$1@nemesis.news.tpi.pl... > >> Witam, czy w MSSQL jest cos takiego jak odpowiednik LIST z sybase? Czyli >> wbudowana f-cja, która zwraca listę wartości oddzieloną przecinkami? Np.
> AFAIK nie. > Kłania się kursor i ręczne oprogramowanie. >
A w SQL 2005 można zaprząc do tego jakiś język .netowy (c#, vb.net), co pewnikiem będzie z korzyścią dla szybkości działania jak i przejrzystości kodu. -- Pozdrawiam Grzegorz
Gsue - 25-01-2007 00:01
Użytkownik "Grzegorz Danowski" <gdn__na@serwerze__poczta.onet.pl> napisał w wiadomości news:ep71q1$egi$1@inews.gazeta.pl... > "Gsue" <gsue44@wp.pl> wrote in message > news:ep5q3f$h9b$1@nemesis.news.tpi.pl... >> >>> Witam, czy w MSSQL jest cos takiego jak odpowiednik LIST z sybase? Czyli >>> wbudowana f-cja, która zwraca listę wartości oddzieloną przecinkami? Np. > >> AFAIK nie. >> Kłania się kursor i ręczne oprogramowanie. >> > > A w SQL 2005 można zaprząc do tego jakiś język .netowy (c#, vb.net), co > pewnikiem będzie z korzyścią dla szybkości działania jak i przejrzystości > kodu. > -- > Pozdrawiam > Grzegorz
Moja szklana kula wskazuje na gorzką ironię wypowiedzi :-( Niestety nie mam innego rozwiązania na stworzenie takiej listy niż przebiegnięcie całego zbioru kursorem. (oprócz zrobienia tego samego w kodzie dla net'a oraz procedury rozszerzonej dla wcześniejszych wersji serwera ). Pomijam tu sensowność/konieczność tworzenia takiego rozwiązania. Będę wdzięczny za podpowiedź jak można to zrobić inaczej.
Pozdrawiam Gsue / też Grzegorz zresztą /
sylseb@poczta.onet.pl - 25-01-2007 00:01
> Witaj, > AFAIK nie. > Kłania się kursor i ręczne oprogramowanie.
No to chyba musze sie mu odklonic grzecznie, bo niestety moim zadaniem bylo zraportowac cos z istniejacego systemu.
S.
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Grzesiek G. - 25-01-2007 00:01
Gsue napisał(a): > Użytkownik "Grzegorz Danowski" <gdn__na@serwerze__poczta.onet.pl> napisał w > wiadomości news:ep71q1$egi$1@inews.gazeta.pl... > >>"Gsue" <gsue44@wp.pl> wrote in message >>news:ep5q3f$h9b$1@nemesis.news.tpi.pl... >> >>>>Witam, czy w MSSQL jest cos takiego jak odpowiednik LIST z sybase? Czyli >>>>wbudowana f-cja, która zwraca listę wartości oddzieloną przecinkami? Np. >> >>>AFAIK nie. >>>Kłania się kursor i ręczne oprogramowanie. >>> >> >>A w SQL 2005 można zaprząc do tego jakiś język .netowy (c#, vb.net), co >>pewnikiem będzie z korzyścią dla szybkości działania jak i przejrzystości >>kodu. >>-- >>Pozdrawiam >>Grzegorz > > > Moja szklana kula wskazuje na gorzką ironię wypowiedzi :-( > Niestety nie mam innego rozwiązania na stworzenie takiej listy niż > przebiegnięcie całego zbioru kursorem. (oprócz zrobienia tego samego w > kodzie dla net'a oraz procedury rozszerzonej dla wcześniejszych wersji > serwera ). > Pomijam tu sensowność/konieczność tworzenia takiego rozwiązania. > Będę wdzięczny za podpowiedź jak można to zrobić inaczej.
Można bez kursora: DECLARE @o VARCHAR(2000)
SET @o = ''
SELECT @o = @o + Value + ',' FROM tabela WHERE ... ORDER BY ...
IF LEN(@o) > 1 BEGIN SET @o = SUBSTRING(@o, 1, LEN(@o)-1) END
RETURN @o
Gdzie Value jest kolumną znakową. Ale nie wiem, czy to jest szybsze i lepsze od kursora:-).
Pozdrawiam
-- Grzegorz Gruza Odpowiadając usuń "spamerom_nie." z adresu!!!
Robert Winkler - 25-01-2007 00:01
>> A w SQL 2005 można zaprząc do tego jakiś język .netowy (c#, vb.net), co >> pewnikiem będzie z korzyścią dla szybkości działania jak i przejrzystości >> kodu. >> -- >> Pozdrawiam >> Grzegorz > > Moja szklana kula wskazuje na gorzką ironię wypowiedzi :-(
Propozycja zastosowania w SQL2005 innych języków niż T-SQL wcale nie była ironią ze strony Grzegorza. Tak właśnie teraz sie robi w nowym SQL'u i jest to zdecydowanie szybsze w działąniu niż rzeźba z T-SQL'u.
Przykład agregatora jakiego szuka S.:
using System; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; using System.Collections.Generic; using System.Text;
[Serializable] [Microsoft.SqlServer.Server.SqlUserDefinedAggregate (Format.Native)] public struct LIST { public void Init() { _list = new List<string>(); }
public void Accumulate(SqlString Value) { if (Value.IsNull) _list.Add("NULL"); else _list.Add(string.Format("'{0}'", Value.Value)); }
public void Merge(LIST Group) { _list.AddRange(Group._list); }
public SqlString Terminate() { string[] strArray = _list.ToArray(); string result = string.Join(", ", strArray); return new SqlString(result); }
private List<String> _list; }
-- ____________ Robert Winkler
Maciej =?iso-8859-2?Q?=A3uszczy=F1ski?= - 25-01-2007 00:01
>> SELECT >> LIST( NAZWA_UZ ) FROM UZYTKOWNICY zwroci jeden wiersz z nazwami >> uzytkownikow >> przedzielonymi przecinkiem. >> > AFAIK nie. > Kłania się kursor i ręczne oprogramowanie.
Witam.
Po co od razu kursor? Mozna tak:
DECLARE @Uzytkownicy varchar(1000) SET @Uzytkownicy = '' SELECT @Uzytkownicy = @Uzytkownicy + Nazwa_Uz + ',' FROM Uzytkownicy
Pamietac trzeba tylko o zadeklarowaniu zmiennej odpowiedniej dlugosci (przy dluzszych stringach moze byc problem, bo nie mozna deklarowac zmiennych typu text).
Pozdrawiam Maciek -- *** A czym się różni Cray od normalnego peceta? *** Tym, że Cray wykonuje pętle nieskończone w 10 sekund.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?=
=?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?=
[MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?=
Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
=?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?=
[Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?=
=?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?=
[oracle] - Oracle SQL Developer - co to jest SID?
=?ISO-8859-2?Q?[Oracle]_Wywo=B3anie_skryptu_sh_z_PL/SQL-a=3F=3F?=
zanotowane.pldoc.pisz.plpdf.pisz.plptsite.xlx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|