我創建了一個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 '[email protected] +' EXEC proc_depend ' + @tableName
EXEC (@sql)
FETCH name_cur INTO @dbName, @tableName
END
CLOSE name_cur
DEALLOCATE name_cur
GO
是的它的工作!我在我寫的存儲過程中創建一個表。但是當我從上面的查詢中調用它時,它會返回一個錯誤,表明該表已經存在。當我們運行存儲過程時,表是否被創建?我很困惑。 – CamAd
但是,對於執行哪個數據庫最新的程序真的很重要嗎?我認爲SP引用的所有對象都被認爲與SP位於同一數據庫中,除非它們使用不同的數據庫名稱進行顯式限定。 –