web-dev-qa-db-fra.com

Comment puis-je déterminer si une séquence existe dans SQL Server 2012?

J'ai besoin de créer un script SQL pour déterminer si une séquence existe dans une base de données SQL Server 2012. Je connais le processus pour déterminer si une procédure stockée existe mais pas une séquence. Je vous remercie.

15
Prabhakar K

Le script permettant de déterminer si une séquence existe ou non dans SQL Server 2012 est très similaire à la vérification des procédures stockées. Considérez le code suivant qui vérifie si une procédure stockée existe:

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

Les valeurs de 'P' et 'PC' pour le type spécifient que le type de sys.object est une procédure stockée SQL ou une procédure stockée CLR (Assembly). Pour vérifier une séquence, il vous suffit de la changer en "SO", ce qui indique qu'il s'agit d'un objet de séquence:

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

Par exemple, si vous souhaitez créer une séquence si elle n'existe pas, vous pouvez utiliser le code suivant:

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

J'espère que ça aide!

27
Tim S

En archivant les données dans la table sys.sequences :

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

en fait, si vous êtes sûr qu'il n'y a pas d'autre objet qu'une séquence avec un nom égal à 'schema_name.sequence_name', vous pouvez simplement vérifier object_id('schema_name.sequence_name') is not null

sql fiddle demo

9
Roman Pekar

Voici une autre version raccourcie de Tim S:

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

Essaye ça. Ceci listera toutes les séquences pour une base de données donnée.

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
3
Techie Joe

J'utilise SQL Server 17.4 (dernière version de MS SQL Sever) et ce script SQL a fonctionné avec moi. Ce script SQL, par exemple, crée la séquence s'il n'existe pas.

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;
2
Mohammed Osman