2013-09-26 88 views

Trả lời

21

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!

+0

Đó là những gì tôi cần. Cảm ơn bạn. –

+4

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 .... –

+0

ví dụ tốt .. Tôi đã học được điều mới trong sql2012 –

8

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

sql fiddle demo

1

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 
1

Đâ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 
0

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; 
Các vấn đề liên quan