it-swarm.dev

Como posso determinar se existe uma sequência no SQL Server 2012?

Preciso criar um script SQL para determinar se existe uma sequência em um banco de dados do SQL Server 2012. Estou familiarizado com o processo para determinar se existe um procedimento armazenado, mas não sequência. Obrigado.

15
Prabhakar K

O script para determinar se existe ou não uma sequência no SQL Server 2012 é muito semelhante à verificação de procedimentos armazenados. Considere o seguinte código que verifica se existe um procedimento armazenado:

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

Os valores de 'P' e 'PC' para o tipo especificam o tipo do sys.object é um procedimento armazenado em SQL Stored Procedure ou em Assembly (CLR). Para verificar uma sequência, basta alterá-la para 'SO', que indica que é um Objeto de Sequência:

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

Por exemplo, se você quiser criar uma Sequência, se ela não existir, poderá usar o seguinte código:

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

Eu espero que isso ajude!

27
Tim S

Verificando dados na tabela sys.sequences :

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

na verdade, se você tem certeza de que não há outro objeto além da sequência com o nome igual a 'schema_name.sequence_name', basta verificar object_id('schema_name.sequence_name') is not null

sql fiddle demo

9
Roman Pekar

Esta é outra versão de atalho do Tim S:

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

Tente isso. Isso listará todas as seqüências para um determinado banco de dados.

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

Estou usando o SQL Server 17.4 (versão mais recente do MS SQL Sever) e esse script SQL funcionou comigo. Este script SQL, por exemplo, cria a sequência, se não existir.

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