ďťż
 
Nazwa tabeli jako parametr do procedury dla SQL2005 Server - jakprzekazac? ďťż
 
Nazwa tabeli jako parametr do procedury dla SQL2005 Server - jakprzekazac?
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

Nazwa tabeli jako parametr do procedury dla SQL2005 Server - jakprzekazac?



pebryl - 11-05-2007 12:32
Nazwa tabeli jako parametr do procedury dla SQL2005 Server - jakprzekazac?
  Witam
W jaki sposob mozna do procedury do SQL2005 serwera przekazac parametr
ktory bedzie nazwa tabeli i potem wykorzysta ja w selekcie ?

Proba

Create Procedure sprawdz @tabela varchar(100)
Select * from @tabela - nie dziala
Select * from "@tabela" - nie dziala
Select * from ",@tabela," - nie dziala
Select * from "'@tabela'" j.w

Jak to zrobic ?





Robert Winkler - 11-05-2007 12:32

  > Witam
> W jaki sposob mozna do procedury do SQL2005 serwera przekazac parametr ktory bedzie nazwa tabeli i potem wykorzysta ja w selekcie
> ?
>
> Proba
>
>
> Create Procedure sprawdz @tabela varchar(100)
> Select * from @tabela - nie dziala
> Select * from "@tabela" - nie dziala
> Select * from ",@tabela," - nie dziala
> Select * from "'@tabela'" j.w
>
> Jak to zrobic ?

ALTER PROCEDURE [dbo].[sprawdz] @tabela varchar(100) AS
BEGIN
SET NOCOUNT ON;
DECLARE @STMT NVARCHAR(MAX)
SET @STMT = 'SELECT * FROM [' + @tabela + ']'
EXEC sp_executesql @STMT
END

Wywołać mozesz to na przykład w taki sposób:
exec sprawdz 'TabelaTestowa'

Ale naprawde ciekawe efekty pojawią się dopiero
gdy dociekliwy użytkownik wywoło tą procedure
na przyklad w następujący sposób:

exec sprawdz 'TabelaTestowa]; DROP TABLE [RozliczenieFinansowe];--'

Po wykonaiu takiego zapytania gwarantuje ci mnóstwo rozrywki ;-)))

--
____________
Robert Winkler




Marcin A. Guzowski - 11-05-2007 12:32

  Robert Winkler wrote:
> ALTER PROCEDURE [dbo].[sprawdz] @tabela varchar(100) AS
> BEGIN
> SET NOCOUNT ON;
> DECLARE @STMT NVARCHAR(MAX)
> SET @STMT = 'SELECT * FROM [' + @tabela + ']'
> EXEC sp_executesql @STMT
> END
>
> Wywołać mozesz to na przykład w taki sposób:
> exec sprawdz 'TabelaTestowa'
>
> Ale naprawde ciekawe efekty pojawią się dopiero
> gdy dociekliwy użytkownik wywoło tą procedure
> na przyklad w następujący sposób:
>
> exec sprawdz 'TabelaTestowa]; DROP TABLE [RozliczenieFinansowe];--'
>
> Po wykonaiu takiego zapytania gwarantuje ci mnóstwo rozrywki ;-)))

SQL injection rzeczywiście może być poważnym problemem, ale jeżeli już
działać z dynamiczny SQLem, to jedna z linijek procedury powinna
wyglądać tak:

SET @STMT = 'SELECT * FROM ' + QUOTENAME(@tabela)

--
Pozdrawiam,
Marcin Guzowski
http://guzowski.info
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    =?iso-8859-2?q?Co_oznacza_b=B3=B1d_Warning:_mysql=5Fconnect() _[function.mysql-connect]:_Can't_connect_to_local_MySQL_server_through_sock et_'/var/run/mysqld/mysqld.sock'_(2)_in?= jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?= [MySQL] =?ISO-8859-2?Q?z=B3=B1czenie_tabeli_u=BFytkownik_i?==?ISO-8859-2?Q?_zdj=EAcia_z_wyborem_zdj=EAcia_domy=B6lnego?= [MySQL] Jak =?ISO-8859-2?Q?wpisa=E6_do_tabeli_pozycje_dl?==?ISO-8859-2?Q?a_wierszy_gdybym_te_wiersze_wybiera=B3_w_ok?== ?ISO-8859-2?Q?re=B6lonej_kolejno=B6ci_=3F?= Tworzenie tabeli z =?ISO-8859-2?Q?nazw=B1_ustalan=B1_przez_?==?ISO-8859-2?Q?usera?= =?ISO-8859-2?Q?Zawarto=B6=E6_tabeli_na_podstawie_warto=B6?==? ISO-8859-2?Q?ci_w_innej?= [oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?= MySQL - jak =?ISO-8859-2?Q?wyeksportowa=E6_zawarto=B6=E6_wie?==?ISO-8859-2?Q?lkiej_tabeli?= [MySQL] Skopiowanie =?ISO-8859-2?Q?warto=B6ci_z_jednego_po?==?ISO-8859-2?Q?la_do_drugiego_w_jednej_tabeli=2C_r=F3=BFne_?= =?ISO-8859-2?Q?wiersze=2E?= [MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • atanvarne633.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