Tôi cần tạo tập lệnh SQL để xác định xem chuỗi có tồn tại trong cơ sở dữ liệu SQL Server 2012 hay không. Tôi quen thuộc với quá trình để xác định nếu một thủ tục lưu trữ tồn tại nhưng không phải trình tự. Cảm ơn bạn.Làm thế nào tôi có thể xác định nếu một Chuỗi tồn tại trong SQL Server 2012?
Trả lời
Tập lệnh để xác định có hay không một chuỗi thoát ts trong SQL Server 2012 rất giống với việc kiểm tra các thủ tục được lưu trữ. Xét đoạn mã sau để kiểm tra xem liệu một Stored Procedure tồn tại:
SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[SProc_Name]') AND type IN (N'P', N'PC')
Các giá trị của 'P' và 'máy tính' cho kiểu xác định loại của sys.object là một SQL Stored Procedure hoặc một hội (CLR) được lưu trữ-thủ tục. Để kiểm tra một chuỗi, bạn chỉ cần thay đổi nó để 'SO' mà chỉ nó là một đối tượng trình tự:
SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[Sequence_Name]') AND type = 'SO'
Ví dụ, nếu bạn muốn tạo một chuỗi nếu nó không tồn tại, bạn có thể sử dụng mã sau:
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
Tôi hy vọng điều này sẽ hữu ích!
Bằng cách kiểm tra dữ liệu trong sys.sequences bảng:
select *
from sys.sequences
where object_id = object_id('schema_name.sequence_name')
thực sự rằng nếu bạn chắc chắn rằng không có đối tượng khác ngoài chuỗi với tên bằng 'schema_name.sequence_name'
, bạn có thể chỉ cần kiểm tra object_id('schema_name.sequence_name') is not null
Hãy thử điều này. Điều này sẽ liệt kê tất cả các trình tự cho một cơ sở dữ liệu nhất định.
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
Đây là một phiên bản shortcut của Tim S:
IF OBJECT_ID('schema_name.sequence_name', 'SO') IS NOT NULL
BEGIN
DROP SEQUENCE schema_name.sequence_name
END
Tôi đang sử dụng SQL Server 17.4 (phiên bản mới nhất của MS SQL Sever) và mã này làm việc với tôi. Mã này, ví dụ, tạo chuỗi nếu không tồn tại.
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;
Đó là những gì tôi cần. Cảm ơn bạn. –
Kể từ SQL Server 2005, bạn nên sử dụng các khung nhìn danh mục ** tập trung ** hơn, như 'sys.sequences' hơn là truy vấn' sys.objects' bắt tất cả và phải ghi nhớ 'loại' cần thiết cho đối tượng của bạn trong câu hỏi .... –
ví dụ tốt .. Tôi đã học được điều mới trong sql2012 –