z-b*_*oss 60 sql t-sql sql-server
目前,我们在脚本文件中为每个存储过程使用单独的drop语句:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MySP]')
AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[MySP]
Run Code Online (Sandbox Code Playgroud)
有没有办法一次性将它们全部丢弃,或者可能在一个循环中?
mar*_*c_s 123
我更喜欢这样做:
首先通过检查系统目录视图生成要删除的存储过程列表:
SELECT 'DROP PROCEDURE [' + SCHEMA_NAME(p.schema_id) + '].[' + p.NAME + '];'
FROM sys.procedures p
Run Code Online (Sandbox Code Playgroud)
这将DROP PROCEDURE在SSMS输出窗口中生成语句列表.
将该列表复制到新的查询窗口中,并可能对其进行调整/更改然后执行它
没有杂乱和缓慢的游标,使您能够检查并仔细检查您的实际删除之前要删除的过程列表
Adr*_*der 103
类似于(使用SQL Server中的存储过程从数据库中删除所有过程).
顺便说一句,这似乎是一件非常危险的事情,只是一个想法......
declare @procName varchar(500)
declare cur cursor
for select [name] from sys.objects where type = 'p'
open cur
fetch next from cur into @procName
while @@fetch_status = 0
begin
exec('drop procedure [' + @procName + ']')
fetch next from cur into @procName
end
close cur
deallocate cur
Run Code Online (Sandbox Code Playgroud)
小智 75
您可以以相同的方式删除表格和视图.
小智 7
在db中创建下面的存储过程(从中你想删除sp的db)
然后右键单击该过程 - 单击执行存储过程..
然后单击确定.
create Procedure [dbo].[DeleteAllProcedures]
As
declare @schemaName varchar(500)
declare @procName varchar(500)
declare cur cursor
for select s.Name, p.Name from sys.procedures p
INNER JOIN sys.schemas s ON p.schema_id = s.schema_id
WHERE p.type = 'P' and is_ms_shipped = 0 and p.name not like 'sp[_]%diagram%'
ORDER BY s.Name, p.Name
open cur
fetch next from cur into @schemaName,@procName
while @@fetch_status = 0
begin
if @procName <> 'DeleteAllProcedures'
exec('drop procedure ' + @schemaName + '.' + @procName)
fetch next from cur into @schemaName,@procName
end
close cur
deallocate cur
Run Code Online (Sandbox Code Playgroud)
关于Rizwana
希望对你有帮助
| 归档时间: |
|
| 查看次数: |
115746 次 |
| 最近记录: |