Dalam artikel ini, saya akan memberikan konstruksi untuk menghapus objek sebelum membuatnya.
Di tim kami, ada sekitar dua puluh pengembang SQL Ninja. Semuanya menggambarkan konstruksi ini dengan cara yang berbeda.
Tim kami terdiri dari sekitar dua puluh Ninja SQL dan semuanya menggunakan pernyataan berikut dengan cara yang berbeda:
JIKA OBJECT_ID('dbo.Function', 'TF') BUKAN NULL DROP FUNCTION dbo.Function;GOCREATE FUNCTION dbo.Function ..
Atau:
JIKA ADA ( SELECT * FROM sys.objects WHERE name ='Procedure' AND type ='P' ) DROP PROCEDURE dbo.Procedure;GOCREATE PROCEDURE dbo.Procedure ..
Atau:
JIKA ADA ( PILIH 1 FROM sys.objects WHERE object_id =OBJECT_ID(N'dbo.Function') DAN ketik IN (N'FN', N'IF', N'TF', N'FS', N' FT')) DROP FUNCTION dbo.Function;GOCREATE FUNCTION dbo.Function ..
Di StackOverflow, pengguna menyukai versi ini:
JIKA ADA ( SELECT * FROM sysobjects WHERE id =object_id(N'function_name') AND xtype IN (N'FN', N'IF', N'TF')) DROP FUNCTION function_nameGO
Bintang-bintang disejajarkan dan saya menemukan implementasi yang sesuai di salah satu situs SQL. Pada awalnya, saya terkejut, tetapi kemudian orang-orang membantu untuk mengetahui mengapa itu bekerja dengan baik.
IF OBJECT_ID('dbo.Function', 'TF') IS NULL EXEC('CREATE FUNCTION dbo.Function() RETURNS @t TABLE(i INT) BEGIN RETURN END');GOALTER FUNCTION dbo.Function ..Intinya adalah jika Anda menggunakan pernyataan DROP dan CREATE setiap kali, maka Anda menghapus izin objek. Selain itu, objek dapat direplikasi dan akan dihapus juga setelah dibuat ulang.
Jadi, saya menyukai versi ini dan memutuskan untuk memasukkannya ke dalam dbo.antidrop prosedur.
Prosedur ini hanya membutuhkan dua argumen:nama objek dan tipenya. Untuk memeriksa jenis objek, jalankan pernyataan berikut:
SELECT type FROM sys.objects WHERE name ='Name'Begini tampilannya:
EXEC dbo.antidrop('dbo.Name', 'FN');GOALTER FUNCTION dbo.Name ..Terakhir, kode prosedurnya adalah sebagai berikut:
IF OBJECT_ID('dbo.antidrop', 'P') IS NULL EXEC('CREATE PROC dbo.antidrop AS');GOCREATE PROC dbo.antidrop @name SYSNAME, @type SYSNAMEASBEGIN DECLARE @if_tf NVARCHAR(512) =' IF OBJECT_ID(''' + @name + ''', ''' + @type + ''') IS NULL EXEC(''CREATE FUNCTION ' + @name + '() RETURNS @t TABLE(i INT) MULAI KEMBALI AKHIR''); PERGILAH '; MENYATAKAN @fn NVARCHAR(512) =' IF OBJECT_ID(''' + @name + ''', ''' + @type + ''') IS NULL EXEC(''CREATE FUNCTION ' + @name + '(@ i INT) RETURNS INT AS BEGIN RETURN @i + 1 END''); PERGILAH '; DECLARE @p NVARCHAR(512) =' IF OBJECT_ID(''' + @name + ''', ''' + @type + ''') IS NULL EXEC(''CREATE PROC ' + @name + 'AS' '); PERGILAH '; DECLARE @v NVARCHAR(512) =' IF OBJECT_ID(''' + @name + ''', ''' + @type + ''') IS NULL EXEC(''CREATE VIEW ' + @name + ' AS SELECT 1 SEPERTI saya''); PERGILAH '; JIKA @ketik (N'IF', N'TF') BEGIN EXEC(@if_tf); END ELSE IF @type =N'FN' BEGIN EXEC(@fn); END ELSE IF @type =N'P' BEGIN EXEC(@p); END ELSE IF @type =N'V' BEGIN EXEC(@v); ENDENDGOTerima kasih atas perhatian Anda!