Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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 server T-SQL:sp_uu依赖于游标_Sql Server_Database_Tsql_Cursor - Fatal编程技术网

Sql server T-SQL:sp_uu依赖于游标

Sql server T-SQL:sp_uu依赖于游标,sql-server,database,tsql,cursor,Sql Server,Database,Tsql,Cursor,我的数据库中有一堆视图,我希望获得列出的依赖项。目前,我正在使用“sp_depends”存储过程来完成此操作。为了加快这个过程,我尝试在遍历视图列表的游标中使用sp_depends存储过程。然而,我一点运气都没有,我花了很多令人尴尬的时间试图用“猎枪”来修复它。下面是我到目前为止得到的 DECLARE @ViewNames TABLE ( ViewName VARCHAR(255) ) INSERT INTO @ViewNames select name from [AMF_Arti

我的数据库中有一堆视图,我希望获得列出的依赖项。目前,我正在使用“sp_depends”存储过程来完成此操作。为了加快这个过程,我尝试在遍历视图列表的游标中使用sp_depends存储过程。然而,我一点运气都没有,我花了很多令人尴尬的时间试图用“猎枪”来修复它。下面是我到目前为止得到的

DECLARE @ViewNames TABLE
(
     ViewName VARCHAR(255)
)
INSERT INTO @ViewNames
select name  from [AMF_Article].sys.views

declare @tableCursor cursor,
         @viewName varchar(100);
set @tableCursor = cursor for select ViewName from @ViewNames

open @tableCursor
fetch next from @tableCursor into @viewName
while(@@fetch_status = 0)
begin

    declare @sql varchar(max)
    set @sql = 'sp_depends ''[dbo].' + @viewName + ''
    PRINT @sql
    exec @sql

 fetch next from @tableCursor into @viewName
end
我认为报价和高管电话是有问题的。我无法让我的单引号匹配,当我匹配时,它仍然告诉我不匹配。当我运行语句时

sp_depends '[dbo].[V_AMF_Distinct_Products]'
一切都很好,但在一个循环中,不是那么多

非常感谢您的帮助。

游标很糟糕:-)。与其在游标中执行proc,为什么不直接从系统表在单个查询中查询所需内容呢。以下内容将为您提供sp_所使用的实际脚本:

sp_helptext 'sp_depends'

看剧本。抓取select语句。更新select和where子句以获取所需内容。不要意外地覆盖或更改实际的sp_dependens proc,否则您的DBA将杀死您。

下面是一种使用sys.views构建动态sql字符串的方法。这里不需要游标

declare @SQL nvarchar(max) = ''

select @SQL = @SQL + 'exec sp_depends ''' + QUOTENAME(name) + ''';'
from sys.views

exec sp_executesql @SQL

除了所有性能方面的考虑外,请查看脚本的稍微更改版本,看看它是否适合您:

DECLARE @tableCursor CURSOR
DECLARE @viewName sysname;
DECLARE @schemaName sysname; 
SET @tableCursor = CURSOR FOR
    SELECT SS.name SchemaName, SV.name ViewName FROM sys.views SV
    JOIN sys.schemas SS ON SS.schema_id=SV.schema_id

OPEN @tableCursor
FETCH NEXT FROM @tableCursor INTO @schemaName, @viewName
WHILE @@FETCH_STATUS = 0
BEGIN
    DECLARE @sql varchar(max)
    SET @sql = 'sp_depends '''+QUOTENAME(@schemaName) + '.' + QUOTENAME(@viewName) + ''''
    PRINT @sql
    EXEC(@sql)
    FETCH NEXT FROM @tableCursor INTO @schemaName, @viewName
END
CLOSE @tableCursor
DEALLOCATE @tableCursor

2016年7月16日更新,感谢Sean

要排除游标逻辑,还可以使用局部变量赋值,如下所示:

DECLARE @sql nvarchar(MAX)=''
SELECT @sql += 'sp_depends '''+QUOTENAME(SS.name) + '.' + QUOTENAME(SV.name) + ''';'
    FROM sys.views SV
    JOIN sys.schemas SS ON SS.schema_id=SV.schema_id

EXEC(@sql)

您的SQL版本是什么?这可能会有帮助,请检查。您可以在查询中尝试使用:
set@SQL='sp_dependens'[dbo].+Quotename(@viewName)+'
@TheGameiswar@@version返回Microsoft SQL Server 2008 R2(SP1)-10.50.2550.0(X64)Jun 11 2012 16:41:53版权所有(c)Microsoft Corporation Standard Edition(64位)在Windows NT 6.1(Build 7601:Service Pack 1)(Hypervisor)@Arulkumar上,当我做出更改时,我被告知“名称'sp_dependens'[dbo].[V_abriders]'不是有效的标识符。”V_abriders是我的观点之一。我知道这是那些可怕的引用。谢谢你的解决方案。这类东西真的不需要光标。