在游标中调用存储过程

发布于 2024-11-20 00:38:28 字数 679 浏览 4 评论 0原文

我创建了一个 SQL Server 2005 存储过程,它查找特定表上的依赖对象。

我想为不同的数据库和不同的表运行这个存储过程。我为此创建了光标。

当我编写 USE @dbname 时,它​​会尝试在 @dbname 中查找存储过程,而不是在当前数据库中。

有人可以帮我如何在光标中写这个命令吗?

DECLARE name_cur CURSOR FOR 
    SELECT db_name, obj_name from Stats_Usage 
    WHERE last_user_update > '2011-06-01' ORDER BY db_name 
DECLARE @tableName NVARCHAR (800)
DECLARE @dbName NVARCHAR(800)
DECLARE @sql NVARCHAR(900)
OPEN name_cur
FETCH name_cur INTO @dbName, @tableName 
WHILE @@Fetch_Status = 0
BEGIN 

SET @sql = 'USE '+@dbName +' EXEC proc_depend ' + @tableName
EXEC (@sql)
FETCH name_cur INTO @dbName, @tableName
END
CLOSE name_cur
DEALLOCATE name_cur
GO

I have created a SQL Server 2005 stored procedure which finds dependent objects on a particular table.

I want to run this stored procedure for different database and for different tables. I have created cursor for this.

When I write USE @dbname, it tries to find the stored procedure in a @dbname and not the current database.

Can anybody please help me with how do I write this command in a cursor?

DECLARE name_cur CURSOR FOR 
    SELECT db_name, obj_name from Stats_Usage 
    WHERE last_user_update > '2011-06-01' ORDER BY db_name 
DECLARE @tableName NVARCHAR (800)
DECLARE @dbName NVARCHAR(800)
DECLARE @sql NVARCHAR(900)
OPEN name_cur
FETCH name_cur INTO @dbName, @tableName 
WHILE @@Fetch_Status = 0
BEGIN 

SET @sql = 'USE '+@dbName +' EXEC proc_depend ' + @tableName
EXEC (@sql)
FETCH name_cur INTO @dbName, @tableName
END
CLOSE name_cur
DEALLOCATE name_cur
GO

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

青春有你 2024-11-27 00:38:28

您可以完全限定您的存储过程名称。

假设您的 SP 所在的数据库名为 procs(例如),您可以修改查询以使用以下内容:

SET @sql = 'USE '+@dbName +' EXEC procs.dbo.proc_depend ' + @tableName
EXEC (@sql)

You can fully qualify your Stored Procedure name.

Assuming the database your SP resides in is called procs (for example), you could amend your query to use the following:

SET @sql = 'USE '+@dbName +' EXEC procs.dbo.proc_depend ' + @tableName
EXEC (@sql)
难忘№最初的完美 2024-11-27 00:38:28

重构存储过程以检查跨数据库的依赖对象。您需要向它发送这样的命令:

  exec proc_depend 'MyDatabase.dbo.MyTable';

试试这个:

 SET @sql = ' EXEC proc_depend ''' @dbName + '.dbo.'+ @tableName + ''';

您需要深入研究 &修改 proc_depend 以确保它可以采用完全限定的对象名称,例如database.schema.table

Refactor your stored proc to check for dependant objects cross database. You'll want to send it a command like this:

  exec proc_depend 'MyDatabase.dbo.MyTable';

Try this instead:

 SET @sql = ' EXEC proc_depend ''' @dbName + '.dbo.'+ @tableName + ''';

You'll need to dig into & modify proc_depend to ensure that it can take a fully qualified object name like database.schema.table

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文