20

SQL Server 2012 データベースにシーケンスが存在するかどうかを判断する SQL スクリプトを作成する必要があります。ストアドプロシージャが存在するがシーケンスが存在しないかどうかを判断するプロセスに精通しています。ありがとうございました。

4

5 に答える 5

34

シーケンスが 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

これが役立つことを願っています!

于 2013-09-26T18:45:11.823 に答える
11

sys.sequencesテーブルのデータをチェックすることにより:

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

実際、 equals という名前のシーケンス以外のオブジェクトがないことが確実な場合は'schema_name.sequence_name'、確認するだけで済みますobject_id('schema_name.sequence_name') is not null

sql fiddle demo

于 2013-09-26T18:37:23.963 に答える
9

これは、Tim S の別のショートカット バージョンです。

IF OBJECT_ID('schema_name.sequence_name', 'SO') IS NOT NULL 
BEGIN
    DROP SEQUENCE schema_name.sequence_name
END
于 2016-09-15T05:45:56.980 に答える
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
于 2013-10-01T14:52:02.293 に答える