Как определить, существует ли последовательность в SQL Server 2012?

Мне нужно создать SQL script, чтобы определить, существует ли последовательность в базе данных SQL Server 2012. Я знаком с процессом определения, существует ли хранимая процедура, но не последовательность. Спасибо.

Ответ 1

script, чтобы определить, существует или нет последовательность в SQL Server 2012, очень похожа на проверку хранимых процедур. Рассмотрим следующий код, который проверяет, существует ли хранимая процедура:

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

Значения 'P' и 'PC' для типа определяют тип sys.object - хранимую процедуру SQL хранимой процедуры или сборки (CLR). Чтобы проверить последовательность, вам просто нужно изменить ее на "SO", которая указывает, что это объект последовательности:

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

Например, если вы хотите создать последовательность, если она не существует, вы можете использовать следующий код:

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

Надеюсь, это поможет!

Ответ 2

Проверяя данные в таблице sys.sequences:

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

на самом деле, если вы уверены, что нет объекта, отличного от последовательности с именем, равным 'schema_name.sequence_name', вы можете просто проверить object_id('schema_name.sequence_name') is not null

демонстрационная версия sql

Ответ 3

Попробуйте это. Это будет отображать все последовательности для данной базы данных.

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

Ответ 4

Это еще одна сокращенная версия Tim S:

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

Ответ 5

Я использую SQL Server 17.4 (последняя версия MS SQL Sever), и этот код работает со мной. Этот код, например, создает последовательность, если она не существует.

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;