2013-09-26 54 views

回答

21

脚本确定序列是否存在SQL Server 2012中的ts与检查存储过程非常相似。请看下面的代码检查,看看如果存储过程存在:

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'而不是查询“全部抓取”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

这是蒂姆·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; 
相关问题