我已经将以下代码放在一起,似乎工作得很好。但是,我需要将它放在存储过程中,但是我收到以下错误:
程序,功能或触发器中不允许使用声明
任何人都知道有解决方法吗?
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 ?'
答案 0 :(得分:4)
您可以简单地使用完全限定的名称,而不是使用USE语句,即
DATABASENAME.SCHEMANAME.TABLENAME.ColumnName
答案 1 :(得分:4)
你应该把它改成那样的工作。您需要使用要在不同数据库上运行的存储过程前面的数据库(和模式)来指定完全限定名称。
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 ?'