оператор использования не разрешен в процедуре, функции или триггере

Я собрал следующий код, который, кажется, работает нормально. Однако мне нужно поместить его в хранимую процедуру, но я получаю следующую ошибку:

оператор использования не допускается в процедуре, функции или триггере

Кто-нибудь знает работу?


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 ?'


person Philip    schedule 14.10.2013    source источник


Ответы (2)


Вы должны изменить его, чтобы он работал так. Вам необходимо указать полное имя, используя базу данных (и схему) перед сохраненными процессами, которые вы хотите запустить в разных базах данных.

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 ?'
person Szymon    schedule 14.10.2013
comment
Дох! Совершенно упустил это. Спасибо . - person Philip; 14.10.2013

Вместо использования оператора USE вы можете просто использовать полное имя, т.е.

DATABASENAME.SCHEMANAME.TABLENAME.ColumnName
person M.Ali    schedule 14.10.2013