【问题标题】:Retrieve definition of Sequence object in SQL Server在 SQL Server 中检索序列对象的定义
【发布时间】:2019-12-24 12:28:38
【问题描述】:

如何在 SQL Server 中获取任何Sequence 对象的定义?例如,如果我想获得 View/Function/Procedure 的定义,我将使用以下查询

SELECT OBJECT_DEFINITION(tab.OBJECT_ID) 
FROM SYS.OBJECTS tab  
WHERE tab.[type] = 'V' /*FOR VIEW*/

SELECT OBJECT_DEFINITION(tab.OBJECT_ID) 
FROM SYS.OBJECTS tab  
WHERE tab.[type] = 'P' /*FOR PROCEDURE*/

SELECT OBJECT_DEFINITION(tab.OBJECT_ID) 
FROM SYS.OBJECTS tab  
WHERE tab.[type] = 'TR' /*FOR TRIGGER*/

如果我们有类似的选项可用于获取 Sequence 对象的详细信息,请告诉我

【问题讨论】:

标签: sql sql-server tsql azure-sql-server


【解决方案1】:

SEQUENCEVIEWPROCEDURE 等对象的定义类型不同,但是,您可以生成自己的:

CREATE SEQUENCE dbo.YourSEQUENCE
       START WITH 7
       INCREMENT BY 4;
GO
SELECT NEXT VALUE FOR dbo.YourSEQUENCE;
GO
SELECT *
FROM sys.sequences
GO

SELECT CONCAT(N'CREATE SEQUENCE ' + QUOTENAME(s.[name]) + N',' + QUOTENAME(sq.[name]),NCHAR(13) + NCHAR(10),
              N'       START WITH ',CONVERT(int,sq.start_value), NCHAR(13) + NCHAR(10),
              N'       INCREMENT BY ',CONVERT(int,sq.increment),N';')
FROM sys.schemas s
     JOIN sys.sequences sq ON s.schema_id = sq.schema_id
WHERE s.[name] = N'dbo'
  AND sq.[name] = N'yourSEQUENCE';

GO
DROP SEQUENCE dbo.YourSEQUENCE;

如果是这样,您有一个包含所有定义的存储库,那应该已经在您的源代码控制软件中。

【讨论】:

  • +1 用于源代码控制。查询目录视图非常适合临时需求,但我建议 SMO 满足一般 DDL 脚本需求。
  • @@user1941025...你应该接受这个答案..如果它对你有用...
  • @user1941025 如果您的序列cycle,有minvaluemaxvalue,或者是cached,那么您还有一些工作要做。 sys.sequences 具有重建​​ create sequnce 语句的这些部分所需的其他数据。 case 表达式可用于将必要的代码添加到语句中。
【解决方案2】:

您的上述查询是正确的..... 即'V' - 供查看 'P' - 用于程序 'TR' -- 触发

 SELECT sm.object_id, OBJECT_NAME(sm.object_id) AS object_name, o.type, o.type_desc, sm.definition  
    FROM sys.sql_modules AS sm  
    JOIN sys.objects AS o ON sm.object_id = o.object_id  
    ORDER BY o.type;  

使用此查询...您将获得单个集合中的所有数据,只需参考类型列名。

P、RF、V、TR、FN、IF、TF 和 R 类型的对象具有关联的 SQL 模块。

The SQL Server Database Engine assumes that object_id is in the current database context. 

The collation of the object definition always matches that of the calling database context.

    OBJECT_DEFINITION applies to the following object types:

    C = Check constraint

    D = Default (constraint or stand-alone)

    P = SQL stored procedure

    FN = SQL scalar function

    R = Rule

    RF = Replication filter procedure

    TR = SQL trigger (schema-scoped DML trigger, or DDL trigger at either the database or server scope)

    IF = SQL inline table-valued function

    TF = SQL table-valued function

    V = View

更多信息...使用此链接...

https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-sql-modules-transact-sql?view=sql-server-ver15

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多