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)
您可以简单地使用完全限定名称,而不是使用 USE 语句,即
DATABASENAME.SCHEMANAME.TABLENAME.ColumnName
Run Code Online (Sandbox Code Playgroud)
你应该把它改成那样工作。您需要在要在不同数据库上运行的存储过程之前使用数据库(和模式)来指定完全限定名称。
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)
| 归档时间: |
|
| 查看次数: |
6459 次 |
| 最近记录: |