是否可以获得使用 WITH EXECUTE 创建的过程列表?

Mar*_*own 1 sql-server stored-procedures sql-server-2014

是否可以获得使用创建的存储过程列表WITH EXECUTE

我尝试查看sys.procedures,但它们都将主体设置为null,并且我知道有一些程序是以这种方式创建的。

Aar*_*and 5

你需要sys.sql_modules

SELECT p.name, m.execute_as_principal_id
  FROM sys.procedures AS p
  INNER JOIN sys.sql_modules AS m
  ON p.[object_id] = m.[object_id]
  WHERE m.execute_as_principal_id IS NOT NULL
  ORDER BY p.name;
Run Code Online (Sandbox Code Playgroud)

如果您需要识别显式EXECUTE AS CALLER与否EXECUTE AS(功能上相同),则需要 parse sys.sql_modules.definition,这远非万无一失(因为EXECUTE AS可以出现在许多不同的上下文中,包括内部注释和字符串文字)。