ďťż
 
[MSSQL] Warunkowe utworzenie procedury ďťż
 
[MSSQL] Warunkowe utworzenie procedury
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] Warunkowe utworzenie procedury



gizm0 - 06-01-2006 09:03
[MSSQL] Warunkowe utworzenie procedury
  Witam
Mam problem. Chcę utworzyć procedurę w bazie ale tylko jeżeli nie została
utworzona. Mam kod, który testuję w Query Analyzerze:

if not exists( select name from sysobjects where (xtype = 'P') and
category='0' and name='dbo.[Dane]' )

BEGIN

CREATE PROCEDURE [dbo].[sp_dbo_Dane_Insert] @_Wiersz_Def_ID int,
@_Pole_Def_ID int, @_Wartosc char(100), @_WykladnikJednostki float
AS

BEGIN
DECLARE @max_id int
SET @max_id = 1

SELECT @max_id = max(Dane_ID) + 1 FROM dbo.[Dane]

INSERT INTO dbo.[Dane] (Dane_ID, Wiersz_Def_ID, Pole_Def_ID, Wartosc,
WykladnikJednostki) VALUES ( @max_id,@_Wiersz_Def_ID, @_Pole_Def_ID,
@_Wartosc, @_WykladnikJednostki)

END

END

Niestety w trakcie wykonania pojawia się błąd - Incorrect syntax near
keyword PROCEDURE i Must declare the scalar variable @_Wiersz_Def_ID. Dziwi
mnie ten błąd ponieważ gdy tworzę samą procedurę (od razu CREATE bez
warunku) to on nie wystepuje i wszystko działa.

Posze o pomoc.

Pozdrawiam
Radek





Azja - 06-01-2006 09:03

  gizm0 wrote on 2006-01-06 00:04:
> Witam
> Mam problem. Chcę utworzyć procedurę w bazie ale tylko jeżeli nie została
> utworzona. Mam kod, który testuję w Query Analyzerze:

Może tak?

if not exists( select name from sysobjects where (xtype = 'P') and
category='0' and name='dbo.[Dane]' )
begin
declare @str varchar(2000)
set @str = 'create procedure test as begin select 1 end'
exec (@str)
end

--
Azja

50% procent badanych nie zdaje sobie sprawy,
że stanowi połowę społeczeństwa




Vez do Han - 06-01-2006 09:03

  Użytkownik "gizm0" <gizm0@op.pl> napisał w wiadomości
news:dpk8me$tqk$1@news.onet.pl...
> Witam
> Mam problem. Chcę utworzyć procedurę w bazie ale tylko jeżeli nie została
> utworzona. Mam kod, który testuję w Query Analyzerze:
Nie ma lekko. Create ... musi być pierwszą instrukcją.
Czyli:
1. if exists drop
albo
2. string zbudować




gizm0 - 07-01-2006 19:03

  > Nie ma lekko. Create ... musi być pierwszą instrukcją.
> Czyli:
> 1. if exists drop
> albo
> 2. string zbudować

Zmodyfikowałem kod uwzględniając usunięcie, ale dalej wywala ten sam błąd.

IF exists( select name from sysobjects where (xtype = 'P') and category='0'
and name='[dbo].[sp_Wiersz_Def_Insert]' )
BEGIN
DROP PROCEDURE [dbo].[sp_dbo_Wiersz_Def_Insert]
END
ELSE
BEGIN
CREATE PROCEDURE [dbo].[sp_dbo_Wiersz_Def_Insert] @_Tabela_Def_ID int,
@_Opis char(50)
AS

BEGIN
DECLARE @max_id int
SET @max_id = 1

SELECT @max_id = max(Wiersz_Def_ID) + 1 FROM dbo.[Wiersz_Def]

INSERT INTO dbo.[Wiersz_Def] (Wiersz_Def_ID, Tabela_Def_ID, Opis) VALUES (
@max_id,@_Tabela_Def_ID, @_Opis)

END

END





gizm0 - 07-01-2006 19:03

 
> 2. string zbudować

Tą metodą działa. Dzięki.




Azja - 07-01-2006 19:03

  gizm0 wrote on 2006-01-06 15:18:

> Zmodyfikowałem kod uwzględniając usunięcie, ale dalej wywala ten sam błąd.

CREATE PROCEDURE sp_dbo_Dane_Insert...
....
GO

if exists( select name from sysobjects where (xtype = 'P') and
category='0' and name='dbo.[Dane]' )
DROP PROCEDURE sp_dbo_Dane_Insert
GO

Wiem, że to trochę dookoła :)

--
Azja

50% procent badanych nie zdaje sobie sprawy,
że stanowi połowę społeczeństwa




gizm0 - 07-01-2006 19:03

  > GO
>
>
> Wiem, że to trochę dookoła :)

To 'GO' powoduje jakieś natychmiastowe wykonianie? Bo faktycznie tak tez
działa. Dzięki
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    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] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?= [MSSQL 2000] =?ISO-8859-2?Q?wywo=B3anie_procesu_z_poziomu_?==?ISO-8859-2?Q?job=27a?= [MSSQL 2K] =?ISO-8859-2?Q?Wp=B3yw_ustawie=F1_regionalnych_?==?ISO-8859-2?Q?serwera_na_zapytania?= Pobierananie danych z innej bazy danych w MSSQL Migracja MSSQL 2005 CTP na 2005 Express MSSQL , funkcja pobierajaca sama date (bez czasu) w funkcji
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • czterowers.keep.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