SQL如何通过遍历表来检查存储过程是否存在

Cod*_*n03 0 sql-server sql-server-2016

假设我有一个Name, Date, StoredProcedure在SQL Server 2016 中有列的表

我需要查询此表并循环遍历存储过程列并检查数据库中是否存在此存储过程.如果它不存在,那么我需要仅为存储过程列使该行为null.

这是我尝试过但它不起作用

Select m1.StoredProcedure 
from MyTable m1 
where
    IF NOT EXISTS (SELECT  *
                   FROM sys.objects
                   WHERE object_id = OBJECT_ID(N'StoredProcedure')
                     AND type IN (N'P', N'PC')) 
    Then Update MyTable m2
         Set StoredProcedure = ''
         Where m2 StoredProcedure = m1.StoredProcedure
Run Code Online (Sandbox Code Playgroud)

Lar*_*rnu 5

我怀疑你所追求的是:

UPDATE MT
SET StoredProcedure = NULL
FROM MyTable MT
     LEFT JOIN sys.procedures p ON MT.StoredProcedure = p.[name]
WHERE p.object_id IS NULL;
Run Code Online (Sandbox Code Playgroud)

还要注意''并且NULL不一样.Set StoredProcedure = ''但是,在您的示例SQL 中,您在问题中声明"我需要为存储过程列使该行为空".我假设你想要NULL而不是一个空字符串('').