ďťż
 
[MSSQL] nazwa bazy danych w zmiennej ďťż
 
[MSSQL] nazwa bazy danych w zmiennej
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

[MSSQL] nazwa bazy danych w zmiennej



kinde - 13-11-2006 00:47
[MSSQL] nazwa bazy danych w zmiennej
  Witam
Jak poprawnie napisać ponizszy skrypt:

DECLARE @nazwa_bazy varchar (50)
SET @nazwa_bazy = 'baza'
USE @nazwa_bazy

wyskakuje blad incorrect syntax

pozdrawiam
kinde





Marcin A. Guzowski - 13-11-2006 00:47

  kinde napisał(a):
> Witam
> Jak poprawnie napisać ponizszy skrypt:
> (..)

Nijak.
Tak się tego nie robi. Można zastosować dynamiczny SQL
i to w określonych sytuacjach zadziała zgodnie z
oczekiwaniami, ale ma też wiele minusów.

--
Pozdrawiam,
Marcin Guzowski
http://guzowski.info




kinde - 13-11-2006 00:47

  >> Jak poprawnie napisać ponizszy skrypt:
>> (..)
> Nijak.
> Tak się tego nie robi. Można zastosować dynamiczny SQL
> i to w określonych sytuacjach zadziała zgodnie z
> oczekiwaniami, ale ma też wiele minusów.

ok
wyglada wiec na to, ze w takim razie w ogole nie mozna
zmienic kontekstu bazy danych (np. w qa) uzywajac zmiennej jako nazwy?
bo exec zmienia kontekst bazy jedynie na czas wykonania execa...

pozdrawiam
kinde




Marcin A. Guzowski - 13-11-2006 00:47

  kinde napisał(a):
> ok
> wyglada wiec na to, ze w takim razie w ogole nie mozna
> zmienic kontekstu bazy danych (np. w qa) uzywajac zmiennej jako nazwy?
> bo exec zmienia kontekst bazy jedynie na czas wykonania execa...

Poczekaj bo troszkę mieszasz.

Wywołanie:
EXEC baza_danych.shemat.procedura @zmienna

to nie żadna zmiana kontekstu tylko pełna kwalifikacja nazwy obiektu
(procedury). Kontekst bazy danych dotyczy natomiast sesji, a właściwie
- batcha, czyli zbioru wyrażeń jednocześnie przesłanych do SQL Servera.
Powyższy fragment kodu może być więc wywołany w kontekście bazy_1,
bazy_2 itd., a mimo to odpali procedurę z bazy baza_danych.

Powiedz co chcesz zrobić, to pomyślimy o prawidłowym rozwiązaniu.
Chyba, że upewniasz się tylko co do możliwych funkcjonalności.

--
Pozdrawiam,
Marcin Guzowski
http://guzowski.info





qqruźNIK - 13-11-2006 00:48

  kinde napisał:

> wyglada wiec na to, ze w takim razie w ogole nie mozna
> zmienic kontekstu bazy danych (np. w qa) uzywajac zmiennej jako nazwy?
> bo exec zmienia kontekst bazy jedynie na czas wykonania execa...

Ale robiłeś to tak:

DECLARE @nazwa_bazy varchar (50)
SET @nazwa_bazy = 'baza'

exec 'use ' + @nazwa_bazy

Nie mam u siebie MSSQLa więc nie mogę sprawdzić ale o ile pamiętam to
takie cos powinno zadziałać.

------------
qqruźNIK




Marcin A. Guzowski - 14-11-2006 00:08

  qqruźNIK napisał(a):
> Ale robiłeś to tak:
>
> DECLARE @nazwa_bazy varchar (50)
> SET @nazwa_bazy = 'baza'
>
> exec 'use ' + @nazwa_bazy

Po 1. Trzeba dodać nawiasy do EXECa, żeby to
w ogóle się wykonało.

Po 2. Nawet poprawnie napisany skrypt nie rozwiązuje
problemu, gdyż kontekst bazy ze zmiennej @nazwa_bazy
istnieje tylko w obrębie kodu dynamicznego SQLa, czyli
tego co władowane jest do EXECa:

DECLARE @database sysname;
SET @database = 'moja_baza';
EXEC ('USE '+@database+'; SELECT 1;');
SELECT 2;

SELECT 1 wykonywany jest w kontekście bazy moja_baza,
natomiast SELECT 2 - już nie.

Post czy dwa wcześniej pisałem o możliwości zastosowania
dynamicznego SQLa (czyli na zasadzie takiej jak SELECT 1)
- to jedyna droga, jeżeli już koniecznie trzeba coś
takiego robić.

--
Pozdrawiam,
Marcin Guzowski
http://guzowski.info
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?= [laik]Jak =?ISO-8859-2?Q?stworzy=E6/zaczac_tworzyc__ma=B3=B1?==?ISO-8859-2?Q?__baz=EA_danych_na_potrzeby_www=3F?= [mysql] przenoszenie danych =?ISO-8859-2?Q?mi=EAdzy_tabelami_?==?ISO-8859-2?Q?w_r=F3=BFnych_bazach?= Ksiazka - "Podstawowy =?ISO-8859-2?Q?wyk=B3ad_z_system=F3w_?==?ISO-8859-2?Q?baz_danych=22?= Zrywanie =?ISO-8859-2?Q?po=B3aczen_z_baza_danych_-_pos?==?ISO-8859-2?Q?tgresql_=3C-=3E_odbc?= Zdalny =?ISO-8859-2?Q?dost=EAp_do_MSSQL_bez_zarz=B1dzani?==?ISO-8859-2?Q?a?= [MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?= [MSSQL 2k] - jak =?ISO-8859-2?Q?pod=B3=B1czy=E6_serwer_na_?==?ISO-8859-2?Q?porcie_innym_ni=BF_1433=3F?= MSSQL Express czy Oracle Express MSSQL 2005 i uruchamianie procedury o =?ISO-8859-2?Q?okre=B6lone?==?ISO-8859-2?Q?j_godzinie?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • misida.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