Tôi có nhóm các thủ tục được lưu trữ với các tên như 'somename_%'. Có cách nào để xóa SP rằng với một truy vấn, forexampleThả nhóm các thủ tục được lưu trữ theo tên
thả THỦ TỤC nơi tên như 'somename_%'
.
Tôi có nhóm các thủ tục được lưu trữ với các tên như 'somename_%'. Có cách nào để xóa SP rằng với một truy vấn, forexampleThả nhóm các thủ tục được lưu trữ theo tên
thả THỦ TỤC nơi tên như 'somename_%'
.
này làm việc cho MSSQL 2005 +
DECLARE @DropScript varchar(max)
set @DropScript = ''
SELECT @DropScript = @DropScript + 'DROP PROCEDURE [' + schema_name(schema_id)+ '].' + '[' + name + ']
' FROM sys.procedures
where name like 'somename_%'
exec (@DropScript)
Nó hoạt động tuyệt vời! – Kate
Nội dung hay. Có lẽ nó sẽ là một chút neater để sử dụng các chức năng QUOTENAME hơn là nối nhưng vui mừng rằng nó hoạt động! –
Con đường tôi luôn có xu hướng làm những loại của sự vật là chỉ trích xuất các thủ tục danh sách từ các bảng hệ thống sử dụng critierion tôi và sau đó tạo ra các danh sách lệnh - hoặc trực tiếp trong sql ví dụ SELECT 'DROP PROCEDURE ' + procName FROM system_procedures_table WHERE procName like...
hoặc trong Excel.
Bạn có thể tạo DDL bằng cách truy vấn từ điển dữ liệu. Ví dụ, trong Oracle:
SELECT 'DROP PROCEDURE "'||owner||'"."'||object_name||'";'
FROM all_procedures
WHERE procedure_name IS NULL
AND lower(object_name) LIKE 'somename_%';
Cảm ơn bạn, nhưng tôi sử dụng MS SQL – Kate
Xin lỗi, tôi nên biết. –
Trong MS_Sql-Server bạn cn tạo ra một Tuyên bố với tất cả các thủ tục liên quan đến thả qua (ab) sử dụng "CHO PATH XML ('')" khoản ...
BEGIN TRANSACTION;
GO
CREATE PROC Test_1 AS
BEGIN;
PRINT '1'
END;
GO
CREATE PROC Test_2 AS
BEGIN;
PRINT '2'
END;
GO
SELECT * FROM sys.objects WHERE name LIKE 'Test%' AND TYPE = 'P';
DECLARE @Stmt NVARCHAR(MAX);
SET @Stmt = (SELECT 'DROP PROC ' + STUFF (x.Stmt, 1, 2, SPACE(0))
FROM (SELECT ', ' + SCHEMA_NAME(Obj.Schema_ID) + CHAR(46) + Obj.Name
FROM sys.objects AS Obj
WHERE Obj.name LIKE 'Test%'
AND obj.TYPE = 'P'
FOR XML PATH ('')
) AS X (Stmt)
);
SELECT @Stmt;
EXEC sp_ExecuteSQL @Stmt;
SELECT * FROM sys.objects WHERE name LIKE 'Test%' AND TYPE = 'P';
ROLLBACK;
Lưu ý rằng [câu trả lời chỉ có liên kết] (http://meta.stackoverflow.com/tags/link-only-answers/info) không được khuyến khích, các câu trả lời SO phải là điểm cuối của việc tìm kiếm giải pháp (so với nhưng một điểm dừng khác của tài liệu tham khảo, mà có xu hướng để có được cũ theo thời gian). Vui lòng xem xét thêm bản tóm tắt độc lập tại đây, giữ liên kết dưới dạng tham chiếu. – kleopatra
bạn đang sử dụng cơ sở dữ liệu nào? – hallie