ďťż
 
konstrukcja: INTO :Zmienna w T-SQL ďťż
 
konstrukcja: INTO :Zmienna w T-SQL
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

konstrukcja: INTO :Zmienna w T-SQL



Issan - 15-11-2006 00:15
konstrukcja: INTO :Zmienna w T-SQL
  Uzywałem wczesniej PL/SQL, a teraz cos robię w SQL Server 2005 Express.

I problem mam oto taki:
W T-SQL nie chca mi dzialac konstrukcje z ze zmiennym dowiazanymi

Select pole from tablica INTO :Zmienna

I musze robic takie coś:

DECLARE kursor_cur CURSOR FOR
select
pole
from tablica;

I potem brac potrzebna wartosc poprzez
FETCH NEXT FROM kursor_cur INTO @Zmienna

Toć to bez sensu !
Czy aż kursor jest tu potrzebny, gdy chce jedna daną wyciagnac z zapytania
..... ?

Dajcie proszę wskazówkę jaką ...

Issan





Paweł Filipiak - 15-11-2006 00:15

  "Issan" <zbjann@wp.pl> wrote in message
news:ejd7gj$mpm$1@achot.icm.edu.pl...
> Uzywałem wczesniej PL/SQL, a teraz cos robię w SQL Server 2005 Express.
>
> I problem mam oto taki:
> W T-SQL nie chca mi dzialac konstrukcje z ze zmiennym dowiazanymi
>
> Select pole from tablica INTO :Zmienna
>

select @zmienna = pole from tabela where....

w przeciwieństwie do pl/sql kontrukcja nie zgłosi błędu w sytuacji, gdy
zapytanie nie zwróci żadnego rekordu (wtedy przypisze wartość null) lub
zwróci więcej niż jeden wiersz (wtedy przypisze pierwszą wartość z brzegu,
wg porządku zwróconych rekordów)

Używanie kursorów w mssql raczej nie wskazane, ze względu na dramatycznie
małą wydajność. Jeżeli już, to stosuj, o ile możliwe kursory z klauzulami
static, read_only, local - szczegóły uzycia w bol.

--
pozdrawiam,
Paweł Filipiak




Issan - 15-11-2006 00:16

  Dziekuję pięknie.
Przetestowałem i działa.
Ale tylko przy prostych zapytaniach.

Bo w poniższym przypadku :

declare @Dokument varchar(30)
Select Top 1
@Dokument = Dokument,
(Select Upust from Upust where Upust.Kontrahent = sprzedaz.Kontrahent)
/ (Select SUM (Kwota) from sprzedaz sp2 where sp2.Kontrahent =
sprzedaz.Kontrahent) - Upust / Kwota as Odchylenie
From sprzedaz
Where Kontrahent = '002'
Order by Odchylenie DESC, Kwota DESC

zakonczło sie błedem:
A SELECT statement that assigns a value to a variable must not be combined
with data-retrieval operations.
Rozumiem, ze to zapytanie jest zbyt 'pokrętne' (z powodu funkcji
agregujacych) i podana konstukcja działa tylko przy prostych zapytaniach ?

pozdrawiam,

Issan

Użytkownik "Paweł Filipiak" <pfilipiak@poczta.fm> napisał w wiadomości
news:ejd85h$d89$1@atena.e-wro.net...
> "Issan" <zbjann@wp.pl> wrote in message
> news:ejd7gj$mpm$1@achot.icm.edu.pl...
> > Uzywałem wczesniej PL/SQL, a teraz cos robię w SQL Server 2005 Express.
> >
> > I problem mam oto taki:
> > W T-SQL nie chca mi dzialac konstrukcje z ze zmiennym dowiazanymi
> >
> > Select pole from tablica INTO :Zmienna
> >
>
>
> select @zmienna = pole from tabela where....
>
> w przeciwieństwie do pl/sql kontrukcja nie zgłosi błędu w sytuacji, gdy
> zapytanie nie zwróci żadnego rekordu (wtedy przypisze wartość null) lub
> zwróci więcej niż jeden wiersz (wtedy przypisze pierwszą wartość z brzegu,
> wg porządku zwróconych rekordów)
>
> Używanie kursorów w mssql raczej nie wskazane, ze względu na dramatycznie
> małą wydajność. Jeżeli już, to stosuj, o ile możliwe kursory z klauzulami
> static, read_only, local - szczegóły uzycia w bol.
>
> --
> pozdrawiam,
> Paweł Filipiak
>




Filip Rembiałkowski - 15-11-2006 00:16

 

On 14 Lis, 22:08, "Issan" <zbj...@wp.pl> wrote:
> Dziekuję pięknie.
> Przetestowałem i działa.
> Ale tylko przy prostych zapytaniach.
>
> Bo w poniższym przypadku :
>
> declare @Dokument varchar(30)
> Select Top 1
> @Dokument = Dokument,
> (Select Upust from Upust where Upust.Kontrahent = sprzedaz.Kontrahent)
> / (Select SUM (Kwota) from sprzedaz sp2 where sp2.Kontrahent =
> sprzedaz.Kontrahent) - Upust / Kwota as Odchylenie
> From sprzedaz
> Where Kontrahent = '002'
> Order by Odchylenie DESC, Kwota DESC
>
> zakonczło sie błedem:
> A SELECT statement that assigns a value to a variable must not be combined
> with data-retrieval operations.
Zapytanie SELECT które przypisuje wartość do zmiennej musi
przypisywać wszystkie kolumny do zmiennych. Nie możesz przypisać
części wyniku do zmiennych a reszty wypluć na ekran.

więc w tym konkretnym przypadku, po prostu przesuń cały kod, który
wylicza warunek, do klauzuli WHERE.
(nie umieszczaj go po SELECT)

Select Top 1 @Dokument = Dokument
From sprzedaz
Where Kontrahent = '002'
Order by
( (Select Upust from Upust where Upust.Kontrahent =
sprzedaz.Kontrahent)
/ (Select SUM (Kwota) from sprzedaz sp2 where sp2.Kontrahent =
sprzedaz.Kontrahent) - Upust / Kwota ) DESC, Kwota DESC

możesz też go przechwycic do drugiej zmiennej jeżeli to Ci bardziej
odpowiada :)

> Rozumiem, ze to zapytanie jest zbyt 'pokrętne' (z powodu funkcji
> agregujacych) i podana konstukcja działa tylko przy prostych zapytaniach ?
>
działa





Grzesiek G. - 16-11-2006 00:22

  Paweł Filipiak napisał(a):
> "Issan" <zbjann@wp.pl> wrote in message
> news:ejd7gj$mpm$1@achot.icm.edu.pl...
>
>> Uzywałem wczesniej PL/SQL, a teraz cos robię w SQL Server 2005 Express.
>>
>> I problem mam oto taki:
>> W T-SQL nie chca mi dzialac konstrukcje z ze zmiennym dowiazanymi
>>
>> Select pole from tablica INTO :Zmienna
>>
>
>
> select @zmienna = pole from tabela where....
>
> w przeciwieństwie do pl/sql kontrukcja nie zgłosi błędu w sytuacji, gdy
> zapytanie nie zwróci żadnego rekordu (wtedy przypisze wartość null) lub

Nie - nie przypisze nic. Poniższy kod:
DECLARE @i INT
SET @i = 1
SELECT @i = 0 WHERE 0 = 1
PRINT @i

wypisuje 1, a nie nulla. Dlatego niektórzy zalecaję używanie przypisań
wg standartu ANSI, poniższe:
DECLARE @i INT
SET @i = 1
SET @i = (SELECT 0 WHERE 0 = 1)
IF @i IS NULL PRINT 'jest null'

wypisze 'jest null'.

> zwróci więcej niż jeden wiersz (wtedy przypisze pierwszą wartość z
> brzegu, wg porządku zwróconych rekordów)
>

Dokładnie rzecz biorąc zwróci ostatni :-).

> Używanie kursorów w mssql raczej nie wskazane, ze względu na
> dramatycznie małą wydajność. Jeżeli już, to stosuj, o ile możliwe
> kursory z klauzulami static, read_only, local - szczegóły uzycia w bol.
>

A to już sama prawda.

Pozdrawiam

--
Grzegorz Gruza
Odpowiadając usuń "spamerom_nie." z adresu!!!
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?= Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?= =?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?= =?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?= 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?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • wawa19wwa91.pev.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com