» »

sql-t stored procedure

sql-t stored procedure

detroit ::

Delam stored proceduro v njej declaram


DECLARE @table char(100)
SET @table = @db + '.' + @sde + '.' + @table_name

pa mi javi error prvič ko uporabim ta @table

Se komu kej sanja zakaj
Skero

detroit ::

javi mi Msg 1087 15, state 2, procedure Two_temps, Line 30
Must declare the table variable "@table".

ekola še kontekst kje se pojavi

CREATE PROCEDURE
Two_temps(@table_name char(50), @a int, @b int.....
...

...
AS
DECLARE @table varchar(100)
set @table = @a + '.' + @b+ '.' + @table_name

SELECT b.*, null as xxx
into #temp1
FROM @table b
LEFT
JOIN ....


pri : "FROM @table b " zajambra zgornji msg
Skero

Zgodovina sprememb…

  • spremenil: detroit ()

joze67 ::

Pa bi to moralo delati? AFAIK FROM pričakuje kvečjemu table variable, ne pa string.

detroit ::

hja sj ich habe keine ahnung:)

Sploh ne vidim drugega načina, nism pa sploh prepričan, da bi to moralo delat

Sicer pa kako boš podal ime tabele, ki je variabilno.

Jst sm prvič v temu sql-t tko da hehe no offense
Skero

Zgodovina sprememb…

  • spremenil: detroit ()

lurker ::

Niti nisi pravilno deklariral table spremenjljivke, niti se stvar ne uporablja tako kot si si ti zamislil.

Poglej si dynamic SQL.

disclaimer: Samo predvidevam, ker se človeku očitno ne zdi vredno napisat kaj sploh hoče nardit.8-)

joze67 ::

celoten sql (ne samo imena tabele) spraviš v string in uporabiš EXEC

detroit ::

@lurker... no ja ne moreš bit kr tko strog. Sj probam sestavit nek stavek skupej pa vidiš, da je težko če ne veš o čem govoriš:)

Bom pogledal dynamic sql (kar sm že prejle sm nism videl rešitve o tem).

@jože ja exec sm uporabil že ...samo čitno narobe


Hvala obema za enkrat, mislim pa, da se bom še oglasil hehe

lep dan
Skero

tomaz_sres ::

Exec tkole ponucaš:

declare @SqlString varchar(1000)
set @SqlString='select * from #ime tabele#'
exec(@SqlString)

Če ti ne dela si se nekje zmotil v sestavljanju stringa.
Lep pozdrav, Tomaž Sreš, http://www.sres.si

detroit ::

Hvala sem sicer že pogledal te zadeve in pohandlou. Se pa pojavla novo vprašanje

v teji stored proceduri imam dve temp tabeli (isti stoplci drugačni podatki)

Kako bi stolpce temp1 in temp2 comparal s kurzorji

DECLARE @Naziv varchar(50)
DECLARE @sqlS nvarchar(MAX)
DECLARE @sqlCursor nvarchar(max)
DECLARE @table_N nvarchar(50)

set @table_N = '''+@table_name+'''

set @sqlS = 'DECLARE cur CURSOR FAST_FORWARD FOR SELECT column_name FROM information_schema.Columns where table_name = '+ @table_N


exec sp_executesql @sqlS

open cur

FETCH cur INTO @Naziv

WHILE @@FETCH_STATUS = 0
BEGIN
	SELECT @Naziv 
	FETCH cur INTO @Naziv
	SET @sqlCursor = 'select ' + @Naziv  + ' from ##temp1 where '+ @Naziv + ' not in (select ' + @Naziv + ' from ##temp2) 
						union select '+ @Naziv + ' from ##temp2 where '+@Naziv + ' not in (select naziv from ##temp1);'
	exec sp_executesql @sqlCursor;
--if @debug = 1 print @sqlCursor
END

CLOSE cur
DEALLOCATE cur


Tole sm napisal (s pomočje neta itak:) ni pa niti videt da dela karkoli


Stvar je taka temp1 in temp2 imata stolpce X, Y, Naziv, Z.
Spodnji query primerja samo stolpec naziv, jaz bi rabil pa da gre čez vse stolpce in to je očitno možno s kurzorji, česar sem se lotil višje pa očitno ne deluje

select Naziv from ##temp1 where Naziv not in (select Naziv from ##temp2) 
union select Naziv from ##temp2 where Naziv not in (select naziv from ##temp1);


p.s. kako se lahko rešim

set @table_N = '''+@table_name+'''


teli apostrofi so mal suspicious
Skero

Zgodovina sprememb…

  • spremenil: detroit ()

zavajon ::

1. Poskusi tako: set @table_N = ''''+@table_name+''''
2. Tisti SELECT @Naziv je po mojem odveč.
3. Drugi FETCH cur INTO @Naziv mora biti po tem, ko @Naziv uporabiš, torej pred END.
4. Upam, da si temp tabele skreiral v isti proceduri pred tem, kar si objavil.
5. Morda bi namesto ...not in (select... lahko uporabil LEFT JOIN
6. sp_executesql ti izvede SQL, ki pa ga nikjer ne uporabiš

detroit ::

Just my luck...nism imel dostopa do slotecha, tako, da sem sam porihtal hehe. Ampak vseeno hvala zavajon (ps. 3 me je jebal.....dolgo:)
Skero


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Preprost kratek SQL - pomoč

Oddelek: Programiranje
7970 (747) Tody
»

T-SQL FIRST / TOP / MAX...

Oddelek: Programiranje
61454 (1454) frudi
»

[Access, Sql] Pogoji pri poizvedbah

Oddelek: Programiranje
51377 (1286) appz
»

[mySQL] Kaj je hitrejše?

Oddelek: Programiranje
141364 (1165) dmok
»

Kako do podatka v queryu iz VisualBasicScripta (VBA) v accessu?

Oddelek: Programiranje
112084 (1969) Fim

Več podobnih tem