[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.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
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.pldoc.pisz.plpdf.pisz.plczterowers.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 |
|