2013-10-14 1 views
4

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

Применение утверждение не допускается в процедуры, функции или триггера

Любое знает работу вокруг?


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

ответ

3

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

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

Doh! Полностью пропустил это. Благодарю . – Philip

3

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

т.е.
DATABASENAME.SCHEMANAME.TABLENAME.ColumnName 
Смежные вопросы