2013-09-26 13 views

risposta

21

Lo script per determinare se una sequenza esiste o meno ts in SQL Server 2012 è molto simile al controllo delle stored procedure. Si consideri il seguente codice che controlla per vedere se una stored procedure esiste:

SELECT * 
FROM sys.objects 
WHERE object_id = OBJECT_ID(N'[dbo].[SProc_Name]') AND type IN (N'P', N'PC') 

I valori di 'P' e 'PC' per il tipo di specificare il tipo di sys.object è una stored procedure di SQL o di un'Assemblea (CLR) stored-procedure. Per verificare la presenza di una sequenza, è sufficiente cambiare a 'COSI', che indica che è un oggetto Sequenza:

SELECT * 
FROM sys.objects 
WHERE object_id = OBJECT_ID(N'[dbo].[Sequence_Name]') AND type = 'SO' 

Ad esempio, se si desidera creare una sequenza, se non esiste, si potrebbe utilizzare il seguente codice:

IF NOT EXISTS(SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Sequence_Name]') AND type = 'SO') 
CREATE SEQUENCE [dbo].[Sequence_Name] 
    AS [bigint] 
    START WITH 1 
    INCREMENT BY 1 
    MINVALUE 1 
    MAXVALUE 9223372036854775807 
    CACHE 3 
GO 

Spero che questo aiuti!

+0

Questo è ciò di cui ho bisogno. Grazie. –

+4

A partire da SQL Server 2005, è preferibile utilizzare le ** viste del catalogo ** più mirate, come 'sys.sequences' piuttosto che eseguire query sugli sys.objects' 'catch-all' 'e dover ricordare il 'tipo' necessario' per il tuo oggetto in questione .... –

+0

buon esempio .. Ho imparato una nuova cosa in sql2012 –

8

Controllando i dati in sys.sequences tabella:

select * 
from sys.sequences 
where object_id = object_id('schema_name.sequence_name') 

in realtà che se si è sicuri che non c'è oggetto diverso sequenza con il nome uguale 'schema_name.sequence_name', si può solo controllare object_id('schema_name.sequence_name') is not null

sql fiddle demo

1

Prova questo. Questo elencherà tutte le sequenze per un determinato database.

SELECT 
seq.name AS [Sequence Name], 
seq.object_id AS [Object ID], 
seq.create_date AS [Creation Date], 
seq.modify_date AS [Last Modified Date], 
SCHEMA_NAME(seq.schema_id) AS [Schema], 
CAST(seq.precision AS int) AS [Numeric Precision], 
CAST(seq.scale AS int) AS [Numeric Scale], 
ISNULL(seq.start_value,N'''') AS [Start Value], 
ISNULL(seq.increment,N'''') AS [Increment Value], 
ISNULL(seq.minimum_value,N'''') AS [Min Value], 
ISNULL(seq.maximum_value,N'''') AS [Max Value], 
CAST(seq.is_cycling AS bit) AS [Is Cycle Enabled], 
ISNULL(seq.cache_size,0) AS [Cache Size], 
ISNULL(seq.current_value,N'''') AS [Current Value] 
FROM sys.sequences AS seq 
1

Questa è un'altra versione di scelta rapida di Tim S:

IF OBJECT_ID('schema_name.sequence_name', 'SO') IS NOT NULL 
BEGIN 
    DROP SEQUENCE schema_name.sequence_name 
END 
0

sto usando SQL Server 17.4 (ultima versione di MS SQL Sever) e questo codice funziona con me. Questo codice, ad esempio, crea la sequenza se non esiste.

IF NOT EXISTS 
(
SELECT [name] 
FROM sys.sequences 
WHERE [name] = 'seq_businessTripRequest' 
) 
BEGIN 

CREATE SEQUENCE [dbo].[seq_businessTripRequest] 
AS [BIGINT] 
START WITH 1 
INCREMENT BY 1 
MINVALUE-9223372036854775808 
MAXVALUE 9223372036854775807 
CACHE; 

END; 
Problemi correlati