过程,函数或触发器中不允许使用use语句

Phi*_*lip 6 sql sql-server stored-procedures

我已经将以下代码放在一起,似乎工作得很好.但是,我需要将它放在存储过程中,但是我收到以下错误:

过程,函数或触发器中不允许使用use语句

有人知道一个解决方法吗?


CREATE TABLE #TableRowCounts1
(
      [TableName] VARCHAR(128), 
      [RowCount] INT
) 

CREATE TABLE #TableRowCounts2
(
      [TableName] VARCHAR(128), 
      [RowCount] INT
) 

use Database1
GO

INSERT INTO #TableRowCounts1
(
      [TableName], 
      [RowCount]
      )
EXEC sp_MSforeachtable 
      'SELECT ''?'' 
      [TableName], 
      COUNT(*) [RowCount] 
      FROM ?'

use Database2
GO

INSERT INTO #TableRowCounts2
(
      [TableName], 
      [RowCount]
      )
EXEC sp_MSforeachtable 
      'SELECT ''?'' 
      [TableName], 
      COUNT(*) [RowCount] 
      FROM ?'
Run Code Online (Sandbox Code Playgroud)

M.A*_*Ali 5

您可以简单地使用完全限定名称,而不是使用 USE 语句,即

DATABASENAME.SCHEMANAME.TABLENAME.ColumnName
Run Code Online (Sandbox Code Playgroud)


Szy*_*mon 5

你应该把它改成那样工作。您需要在要在不同数据库上运行的存储过程之前使用数据库(和模式)来指定完全限定名称。

CREATE PROCEDURE SomeProc

AS

CREATE TABLE #TableRowCounts1
(
      [TableName] VARCHAR(128), 
      [RowCount] INT
) 

CREATE TABLE #TableRowCounts2
(
      [TableName] VARCHAR(128), 
      [RowCount] INT
) 

INSERT INTO #TableRowCounts1
(
      [TableName], 
      [RowCount]
      )
EXEC Database1.[dbo].sp_MSforeachtable 
      'SELECT ''?'' 
      [TableName], 
      COUNT(*) [RowCount] 
      FROM ?'

INSERT INTO #TableRowCounts2
(
      [TableName], 
      [RowCount]
      )
EXEC Database2.[dbo].sp_MSforeachtable 
      'SELECT ''?'' 
      [TableName], 
      COUNT(*) [RowCount] 
      FROM ?'
Run Code Online (Sandbox Code Playgroud)