Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查找表值函数在所有存储过程中的使用_Sql_Sql Server 2005_Sql Server 2012 - Fatal编程技术网

Sql 查找表值函数在所有存储过程中的使用

Sql 查找表值函数在所有存储过程中的使用,sql,sql-server-2005,sql-server-2012,Sql,Sql Server 2005,Sql Server 2012,我正在开发一个用于多个存储过程的TVF。如何找到使用该TVF的所有存储过程 您可以在元数据中搜索提及的函数,请记住,如果这是其他地方或注释中提到的常见名称,则可能会产生误报;如果函数调用是使用动态SQL构建的,则可能会错过实例 SELECT s.name, p.name FROM sys.procedures AS p INNER JOIN sys.schemas AS s ON p.[schema_id] = s.[schema_id] INNER JOIN sys.sql_mod

我正在开发一个用于多个存储过程的TVF。如何找到使用该TVF的所有存储过程

您可以在元数据中搜索提及的函数,请记住,如果这是其他地方或注释中提到的常见名称,则可能会产生误报;如果函数调用是使用动态SQL构建的,则可能会错过实例

SELECT s.name, p.name FROM sys.procedures AS p
  INNER JOIN sys.schemas AS s
  ON p.[schema_id] = s.[schema_id]
  INNER JOIN sys.sql_modules AS m
  ON p.[object_id] = m.[object_id]
  WHERE m.definition LIKE N'%tvfname%';

2012年还有其他方法,但由于问题也被标记为2005…

您可以在元数据中搜索您的函数,请记住,如果这是其他地方或注释中提到的常见名称,则可能会产生误报,如果使用动态SQL建立函数调用,则可能会错过实例

SELECT s.name, p.name FROM sys.procedures AS p
  INNER JOIN sys.schemas AS s
  ON p.[schema_id] = s.[schema_id]
  INNER JOIN sys.sql_modules AS m
  ON p.[object_id] = m.[object_id]
  WHERE m.definition LIKE N'%tvfname%';

2012年还有其他方法,但由于问题也被标记为2005…

我已经成功地使用了这个方法

SELECT *
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE OBJECT_DEFINITION(OBJECT_ID(ROUTINE_NAME)) LIKE '%TVFn%'
最好不要搜索视图的“例程定义”字段,因为它已被覆盖。
PS-无法在2005年进行测试,抱歉,我已成功使用此功能

SELECT *
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE OBJECT_DEFINITION(OBJECT_ID(ROUTINE_NAME)) LIKE '%TVFn%'
最好不要搜索视图的“例程定义”字段,因为它已被覆盖。

PS-无法在2005年进行测试,抱歉

这里有一个相关帖子。这里有一个相关的帖子。谢谢回复。我正在寻找2012版。你确定你在正确的数据库中吗?你确定有一个过程包含
tvfname
吗?是的,我确定。我检查了两次。@user3203331好吧,我不知道该告诉你什么,我已经验证了这个代码在我的数据库中有效。@AaronBertrand,可能所有使用它的实例都在动态sql中。感谢您的回复。我正在寻找2012版。您确定您在正确的数据库中吗?你确定有一个过程中包含
tvfname
吗?是的,我确定。我检查了两次。@user3203331好吧,我不知道该告诉你什么,我已经验证了这段代码在我的数据库中有效。@AaronBertrand,可能是所有使用它的实例都在动态sql中。这是使用它的原因之一。还要注意的是,即使您使用
NOLOCK
@Aaron之类的东西,也会阻塞,这在典型的开发环境中会造成严重后果吗?还是本地开发环境?谁说这是开发环境?这里的答案不仅仅是为了这篇文章,也是为了所有未来的读者。在某些情况下,当SQL Server中存在一些您应该避免使用的内容时,为什么只在可能没有问题的情况下(今天)使用它呢?然后你依靠读者拥有与你相同的知识,知道何时使用它们,何时不使用它们。一直使用(并教授如何使用)目录视图要安全得多,特别是在您提到了一个限制之后,您错过了很多。(你看过链接了吗?)最后,请注意,我没有否决投票,只是添加了一条澄清性的评论,以便读者可以用比你提供的更多的信息做出自己的决定。当人们习惯于使用信息模式或这些阻止功能时,他们可能不知道6个月后在生产中、紧急情况下等出现问题时会发生什么。我更喜欢教人们用适当的诱饵和钓具捕鱼,而不是炸药,因为我不知道他们是否总是正确地使用后者。我确实阅读了链接,但没有意识到你揭露的问题-谢谢。在我有限的经验中,这种操作主要在开发环境中使用——因此我提出了一个问题。这是一个原因。还要注意的是,即使您使用
NOLOCK
@Aaron之类的东西,也会阻塞,这在典型的开发环境中会造成严重后果吗?还是本地开发环境?谁说这是开发环境?这里的答案不仅仅是为了这篇文章,也是为了所有未来的读者。在某些情况下,当SQL Server中存在一些您应该避免使用的内容时,为什么只在可能没有问题的情况下(今天)使用它呢?然后你依靠读者拥有与你相同的知识,知道何时使用它们,何时不使用它们。一直使用(并教授如何使用)目录视图要安全得多,特别是在您提到了一个限制之后,您错过了很多。(你看过链接了吗?)最后,请注意,我没有否决投票,只是添加了一条澄清性的评论,以便读者可以用比你提供的更多的信息做出自己的决定。当人们习惯于使用信息模式或这些阻止功能时,他们可能不知道6个月后在生产中、紧急情况下等出现问题时会发生什么。我更喜欢教人们用适当的诱饵和钓具捕鱼,而不是炸药,因为我不知道他们是否总是正确地使用后者。我确实阅读了链接,但没有意识到你揭露的问题-谢谢。在我有限的经验中,这种操作主要用于开发环境——因此我的问题是。