我需要创建一个SQL脚本来确定序列是否存在于SQL Server 2012数据库中。我熟悉用于确定存储过程是否存在但不是序列的过程。谢谢。如何确定SQL Server 2012中是否存在序列?
10
A
回答
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
我希望这有助于!
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
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;
相关问题
- 1. 如何确定SQL Server中是否存在数据库角色?
- 2. 是否SQL Server 2012 express serverless
- 3. 在SQL Server 2012中使用序列
- 4. SQL Server 2012的序列
- 5. NHibernate和SQL Server 2012序列
- 6. 确定SQL Server CE中是否存在表?
- 7. 如何检查给定时隙已经存在SQL Server 2012中
- 8. 如何检查SQL Server中是否存在列?
- 9. 如何检查SQL Server中是否存在表的列表?
- 10. 当NULL值可能时,如何检查SQL Server 2012中是否存在记录?
- 11. 如何在SQL Server数据工具2012中按列排序
- 12. 如何在SQL Server 2012的特定列中插入数据?
- 13. 如何在SQL Server 2012中自定义排序此数据?
- 14. 如何在C#中确定SQL Server数据库列是否为自动增量?
- 15. 如何确定列是否在其表的主键中? (SQL Server)的
- 16. 是否存在Microsoft SQL Server绑定?
- 17. 如何在SQL Server 2012
- 18. 我如何在SQL Server(2012)
- 19. SQL Server中是否有“按列排序”?
- 20. 如何确定是否存在SQL服务器或数据库
- 21. SQL Server 2012是否支持ProClarity?
- 22. fluentmigrator是否适用于SQL Server 2012?
- 23. SQL Server确定值是否单调
- 24. 确定SQL Server表是否为只读
- 25. SQL Server 2012的列存储索引
- 26. 在SQL Server 2012中保存流数据
- 27. 我是否正确安装了SQL Server 2012?
- 28. 在SQL Server 2012
- 29. 确定SQL Server中是否存在临时表的最佳方法是什么?
- 30. SQL Server 2012的序列对象
这就是我所需要的。谢谢。 –
从SQL Server 2005开始,最好使用**更有针对性的**目录视图,比如'sys.sequences'而不是查询“全部抓取”sys.objects并且必须记住必要的'type'为你的对象有问题.... –
很好的例子..我在sql2012中学到新东西 –