ďťż
 
[MS SQL 2000/2005] Procedura z dynamicznym SQL ďťż
 
[MS SQL 2000/2005] Procedura z dynamicznym 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

[MS SQL 2000/2005] Procedura z dynamicznym SQL



Kedzier - 17-05-2006 00:41
[MS SQL 2000/2005] Procedura z dynamicznym SQL
  Witam,

Jak przekazac do procedury zapytanie dynamicznie w postaci string'a,
musze zbudowac dynamicznie sql i musze przekazac do procedury
dynamicznie zbudowanego whera jako stringa.
Czy da sie cos takiego zrobic?

pozdr,
P.





Grzesiek G. - 17-05-2006 00:41

  Kedzier napisał(a):
> Witam,
>
> Jak przekazac do procedury zapytanie dynamicznie w postaci string'a,
> musze zbudowac dynamicznie sql i musze przekazac do procedury
> dynamicznie zbudowanego whera jako stringa.
> Czy da sie cos takiego zrobic?

Tak - sp_executesql. Chociaż lepiej byłoby tego whera budować w samej
procedurze i wykorzystać możliwość podania parametrów do sp_executesql.

--
Grzegorz Gruza
Odpowiadając usuń "spamerom_nie." z adresu!!!




Kedzier - 17-05-2006 00:41

  Grzesiek G. napisał(a):
> Tak - sp_executesql. Chociaż lepiej byłoby tego whera budować w samej
> procedurze i wykorzystać możliwość podania parametrów do sp_executesql.

Moze troche inaczej

mam taka procedure

ALTER PROCEDURE [dbo].[PK_ANALISE_COUNT_AND_PRECENT]
-- Parametry wejsciowe Id definicji i id pytania
@DefinitionID int,
@QuestionID int

AS
BEGIN
SET NOCOUNT ON;

declare @IlAnkiet int;
select @IlAnkiet = count(*) from srv_survey h inner join
srv_survey_object o on (h.object_id=o.object_id) where
h.definition_id=@DefinitionID
SELECT @QuestionID QUESTION_ID, @DefinitionID DEFINITION_ID,
ISNULL(a.VALUE, '') AS nr, COUNT(*) AS il_wystapien, CONVERT(numeric(10,
2), CONVERT(numeric(10, 2), COUNT(*)) / CONVERT(numeric(10, 2),
@IlAnkiet)) * 100 AS Procent
FROM SRV_SURVEY AS h INNER JOIN
SRV_SURVEY_OBJECT AS o ON h.OBJECT_ID =
o.OBJECT_ID LEFT OUTER JOIN
SRV_ANSWER AS a ON a.QUESTION_ID = @QuestionID
AND a.SURVEY_ID = h.SURVEY_ID
WHERE (h.DEFINITION_ID = @DefinitionID)
GROUP BY a.VALUE
END

i teraz jak do tego dobudowac jeszcze where'a dalej ktory moze miec
kilkanascie parametrow zupelnie dynamicznie!

wrzucic to zaputanie w sp_executesql ?




Grzesiek G. - 18-05-2006 00:16

  Kedzier napisał(a):
> Grzesiek G. napisał(a):
>
>> Tak - sp_executesql. Chociaż lepiej byłoby tego whera budować w samej
>> procedurze i wykorzystać możliwość podania parametrów do sp_executesql.
>

PRzesadziłem zbudowaniem whera w procedurze

>
> Moze troche inaczej
>
> mam taka procedure
>
[...]
>
>
> i teraz jak do tego dobudowac jeszcze where'a dalej ktory moze miec
> kilkanascie parametrow zupelnie dynamicznie!
>
>
> wrzucic to zaputanie w sp_executesql ?

Może prostszy przykład do adaptacji:

DECLARE @stmt AS NVARCHAR(4000)
DECLARE @conditions AS NVARCHAR(4000)

SET @stmt = N'SELECT col1, col2 FROM tabela WHERE 1 = 1'
SET @conditions = ''

IF costam
BEGIN
SET @coditions = @conditions + 'AND jakis warunek'
END

....

SET @stmt = @stmt + @conditions

EXEC sp_executesql @stmt

Pozdrawiam

--
Grzegorz Gruza
Odpowiadając usuń "spamerom_nie." z adresu!!!





Kedzier - 18-05-2006 00:16

  Grzesiek G. napisał(a):
> Może prostszy przykład do adaptacji
hehe -> dzieki, w koncu udalo mi sie uruchomic msdn i sam znalazlem
dokumentacje tej procedury :)
dzieki za checi,

a jak jest z wydajnoscia takiej procedurki?

pozdr,
P.




Grzesiek G. - 18-05-2006 00:16

  Kedzier napisał(a):
> Grzesiek G. napisał(a):
>
>> Może prostszy przykład do adaptacji
>
> hehe -> dzieki, w koncu udalo mi sie uruchomic msdn i sam znalazlem
> dokumentacje tej procedury :)
> dzieki za checi,
>
> a jak jest z wydajnoscia takiej procedurki?

Plany wykonania procedur z sp_executesql są keszowane, tu można zyskać w
stosunku do EXEC(zapytanie).

Ale przy rozmowach o wydajności nie można generalizować.

Pozdrawiam

--
Grzegorz Gruza
Odpowiadając usuń "spamerom_nie." z adresu!!!




Kedzier - 18-05-2006 00:16

  Grzesiek G. napisał(a):
> Ale przy rozmowach o wydajności nie można generalizować.

u mnie o tyle to jest wazne ze jesli ja tych zapytan bede mial powiedzmy
do danego zapytania ok 1000 na godzine to cachowanie tego moze
przyspieszyc dzialanie.
niestety zmuszony bylem robic taka procedure generyczna.

pozdr, i dzieki
Piotrek




Grzesiek G. - 18-05-2006 00:16

  Kedzier napisał(a):
> Grzesiek G. napisał(a):
>
>> Ale przy rozmowach o wydajności nie można generalizować.
>
>
> u mnie o tyle to jest wazne ze jesli ja tych zapytan bede mial powiedzmy
> do danego zapytania ok 1000 na godzine to cachowanie tego moze
> przyspieszyc dzialanie.
> niestety zmuszony bylem robic taka procedure generyczna.

Jeszcze lepiej jest robić zapytania na kliencie i używać parametrów dla
sp_executesql. Wtedy będą keszowane plany zapytań dla różnych zestawów
parametrów.

Pozdrawiam

--
Grzegorz Gruza
Odpowiadając usuń "spamerom_nie." z adresu!!!
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Centralny serwer =?ISO-8859-2?Q?log=F3w_MS_Windows_na_Po?==?ISO-8859-2?Q?stgreSQL?= [OT] Praca - wymagania PS, CD, AI, AE, QE, MS, CD, AVI, SWF... [oracle] czy da =?ISO-8859-2?Q?si=EA_z_poziomu_procedury_?==?ISO-8859-2?Q?zrobi=E6_kopi=EA_zapasow=B1=3F?= =?iso-8859-2?Q?[MS=20SQL=202000]=20Warto=B6=E6=20domy=B6lna=20w=20polu=20datetime? = =?iso-8859-2?Q?=5BMySQL=5D_i_MS_Acccess_insert_do_dw=F3ch_tab el?= Współużytkowanie jednej bazy poprzez 2 komputery (uzupełnianie) jak ? (Baza w MS acces97 na 1 komp.) =?iso-8859-2?Q?VB_6.0=2C_.NET=2C_2005=2C_czym_to_si=EA_r=F3=B Fni=3F?= =?iso-8859-2?Q?jak_zamieni=E6_dane_w_bazie_MS_access?= MS Excel - =?ISO-8859-2?Q?wilodost=EApowo=B6=E6?= =?iso-8859-2?Q?=5BSQL_Server_2000=5D_uprawnienienia_do_u=BFyw ania_widoku_?==?iso-8859-2?Q?opartego_na_tabeli_z_innej_bazy?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • autwywalczyl.opx.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