2013-09-26 2 views
10

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

ответ

21

Сценарий для определения того, является ли exquence exis ts в 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 

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

+0

Это то, что мне нужно. Спасибо. –

+4

Начиная с SQL Server 2005 предпочтительнее использовать ** более целенаправленные ** представления каталога, такие как 'sys.sequences', а не запрашивать« catch-all »' sys.objects' и запоминать необходимый тип 'type' для вашего объекта ... –

+0

хороший пример .. Я узнал новую вещь в sql2012 –

8

Проверив данные в 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 fiddle demo

1

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

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

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

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

Я использую 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; 
Смежные вопросы