Create Procedure

mercoledì 09 maggio 2007 - 19.51

melmar20 Profilo | Junior Member

Ciao a tutti !!

Sto utilizzando Microsoft SQL Server e ho scritto questa procedura

if not exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier YourCompany_PrendiInidrizzo]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
BEGIN
create procedure {databaseOwner}{objectQualifier}YourCompany_PrendiIndirizzo
as
SELECT SettingValue
FROM {objectQualifier}HostSettings
WHERE SettingName = 'HostEmail'
END
GO

ma mi segnala un errore quando lo esegue. Secondo me tutto sta all'inizio delle procedura quando gli specifico il NOT

dedalo.nel.labirinto Profilo | Newbie




beh come prima cosa non puoi creare una stored procedure dentro un if... non puoi far precedere niente ad un instruzione craete procedure.
poi le parentesi graffe non fanno parte della sintassi.

se per esempio tu volessi usarla per controllare l'esistenza di un oggetto come una tabella e solo in quel caso eseguire la select, allora sarebbe:

if exists ( select * from dbo.sysobjects where id = object_id(N'dbo.[HostSettings]') and xtype = 'U' )
begin

SELECT SettingValue
FROM HostSettings
WHERE SettingName = 'HostEmail'

end


per una stored un controllo del genere non ha molto senso :)

melmar20 Profilo | Junior Member

ciao , il punto è che ho bisogno di creare quella procedura ed effettuare prima il controllo sull'esistenza, questo perchè non sò come , probabilmente ci saranno delle protezioni particolari sul sistema ma non me la fà cancellare,quindi vorrei riuscire a fare il controllo così se dovesse essere presente potrei non crearla.


Per esprimermi al meglio,ciò che faccio con la Table lo vorrei fare anche con la Procedure.

Questo faccio con la TABLE:

if not exists (select * from dbo.sysobjects where id = object_id(N'Agenda]') and OBJECTPROPERTY(id, N'IsTable') = 1)
BEGIN
CREATE TABLE [Agenda]
(
[Indice] [int] NOT NULL IDENTITY(0, 1),
[ModuleID] [int] NOT NULL,
[Promemoria] [nvarchar] (250) NOT NULL,
[Descrizione] [ntext] NULL,
[DataOra] [nvarchar](50) NULL,
)

ALTER TABLE {databaseOwner}[{objectQualifier}Agenda] ADD CONSTRAINT [PK_{objectQualifier}Agenda] PRIMARY KEY NONCLUSTERED ([Indice])

END
GO

dedalo.nel.labirinto Profilo | Newbie


scusa non capisco, perchè devi cancellarla?

comunque come controlli l'esistenza delle tabella così puoi fare con la stored:

if exists ( select * from sysobjects where id = object_id(N'[YourCompany_PrendiInidrizzo]') and xtype = 'P')
begin

execute YourCompany_PrendiInidrizzo

end

melmar20 Profilo | Junior Member

no infatti io non devo cancellarla.

Se NON esiste devo creare questa nuova procedure.

Se ESISTE non devo crearla.

mi serve a questo il controllo if e non sò proprio come fare.

dedalo.nel.labirinto Profilo | Newbie

prova questo:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

lbenaglia Profilo | Guru

>Se NON esiste devo creare questa nuova procedure.
>
>Se ESISTE non devo crearla.
>
>mi serve a questo il controllo if e non sò proprio come fare.

Puoi semplicemente utilizzare la funzione OBJECT_ID() che restituisce NULL nel caso in cui l'oggetto passato come argomento non esiste:

USE tempdb; IF NOT OBJECT_ID('dbo.up_MyProcedure') IS NULL DROP PROCEDURE dbo.up_MyProcedure; GO CREATE PROCEDURE dbo.up_MyProcedure AS SELECT 1; GO

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

melmar20 Profilo | Junior Member

non riesco a cancellarla la procedura.ho provato con il Drop ma niente.non ho i permessi giusti.Ecco perchè cercavo di ovviare in quel modo

melmar20 Profilo | Junior Member

ciao dedalo.nel.labirinto ho provato a fare ciò che mi hai dato ma mi solleva un errore che non riesce a segnalarmi dove si trova di preciso.il codice che mi hai mostrato è per Microsoft Sql Server?

Poi io la parte dell'else l'ho trascurata inquanto a me non importa eseguirla io ho bisogno solo di crearla ,quindi memorizzarla nel db e poi richiamarla dal codice del mio programma.

lbenaglia Profilo | Guru

>non riesco a cancellarla la procedura.ho provato con il Drop
>ma niente.non ho i permessi giusti.Ecco perchè cercavo di ovviare
>in quel modo

Eh, altri sistemi non ne conosco.
Connettiti con una login avente le permission necessarie, oppure fattele attribuire da "chi di dovere"

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

dedalo.nel.labirinto Profilo | Newbie

ma la tabella su cui vuoi fare la select esiste nel database?
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5