Muszę dowiedzieć się, czy funkcja istnieje w bazie danych, aby móc ją porzucić i ponownie utworzyć. Zasadniczo powinno to być coś podobnego do następującego kodu, którego używam dla procedur składowanych:
IF EXISTS (
SELECT *
FROM dbo.sysobjects
WHERE id = OBJECT_ID(N'[dbo].[SP_TEST]')
AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )
sql
sql-server
sql-function
Dr Greenthumb
źródło
źródło
Zwykle używam Information_Schema:
dla funkcji i zmiany
Routine_Type
dla procedur składowanychźródło
Dlaczego nie tylko:
Drugi argument funkcji
object_id
jest opcjonalny, ale może pomóc w zidentyfikowaniu właściwego obiektu. Istnieje wiele możliwych wartości dla tego argumentu typu, w szczególności:źródło
CREATE TABLE YourFunctionName(X INT);
następnie uruchomienie kodu zakończy się niepowodzeniem.object_id('YourFunction', 'FN')
lub dowolnego innego oznaczenia (drugiego argumentu), który jasno określi, do jakiego rodzaju obiektu się odnosisz.Odkryłem, że możesz użyć bardzo nierozpoznawalnego i prostego podejścia do sprawdzania istnienia różnych obiektów SQL Server w ten sposób:
Jest to oparte na funkcji OBJECTPROPERTY, która jest dostępna w SQL 2005+. Artykuł MSDN można znaleźć tutaj .
Funkcja OBJECTPROPERTY używa następującego podpisu:
Przekazujesz wartość literału do parametru właściwości, wyznaczając typ obiektu, którego szukasz. Istnieje ogromna lista wartości, które możesz podać.
źródło
Wiem, że ten wątek jest stary, ale chciałem tylko dodać tę odpowiedź dla tych, którzy uważają, że jest to bezpieczniejsze
Alter
niżDrop
iCreate
. PoniżejAlter
przedstawiamy,Function
czy istniejeCreate
, czy nie:źródło
ALTER OR CREATE