如何确定SQL Server 2012中是否存在序列?

如何确定SQL Server 2012中是否存在序列?,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我需要创建一个SQL脚本来确定SQL Server 2012数据库中是否存在序列。我熟悉确定存储过程是否存在而不是序列的过程。谢谢。通过检查表中的数据: 实际上,如果您确定除了名称等于'schema\u name.sequence\u name'的序列之外没有其他对象,那么您可以检查对象id('schema\u name.sequence\u name')是否为空 确定SQL Server 2012中是否存在序列的脚本与检查存储过程非常相似。考虑下面的代码,检查是否存在存储过程: SELECT

我需要创建一个SQL脚本来确定SQL Server 2012数据库中是否存在序列。我熟悉确定存储过程是否存在而不是序列的过程。谢谢。

通过检查表中的数据:

实际上,如果您确定除了名称等于
'schema\u name.sequence\u name'
的序列之外没有其他对象,那么您可以检查
对象id('schema\u name.sequence\u name')是否为空


确定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的类型。对象是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

我希望这有帮助

试试这个。这将列出给定数据库的所有序列

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

这是Tim S的另一个快捷版本:

IF OBJECT_ID('schema_name.sequence_name', 'SO') IS NOT NULL 
BEGIN
    DROP SEQUENCE schema_name.sequence_name
END
我正在使用SQLServer17.4(MSSQLServer的最新版本),这个SQL脚本与我一起工作。 例如,如果序列不存在,此SQL脚本将创建序列

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;

这就是我需要的。谢谢。从SQL Server 2005开始,最好使用更集中的目录视图,如
sys.sequences
,而不是查询“catch all”
sys.objects
,并且必须记住所讨论对象所需的
类型
。@marc_说得对,更容易记住“更集中的目录视图”出于习惯,我仍然使用,但我现在正在考虑进行转换。@StevenFerrer根据您提供的文章,“方法4”表示“
sys.sysobjects
…将被弃用”,而不是
sys.objects
:“Microsoft建议使用目录视图
sys.objects
而不是
sys.sysobjects
system…”@myidealab,很好!我已经删除了我的评论,因为它并没有真正增加这个答案的价值。哈哈,非常感谢!
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;