我在尝试制作一些SQL脚本,它将输出大型数据库中的所有表名,以及每个字段和记录的数量以及字段名称的列表。这将使我们能够将注意力集中在具有数据的表格上,并查找与不同表格匹配的字段名称,这可能是适合连接的地方。为sp_executesql声明输出参数
为此,我试图编写动态SQL,可以遍历所有表。但是我一直无法得到sp_executesql来产生我可以插入到我的表变量中的输出。下面是我到目前为止已经编写的代码:
USE MITAS_TEST;
DECLARE @TablesAbstract TABLE(
TableName VARCHAR(50),
NumberOfFields INT,
NumberOfRecords INT
);
DECLARE @NumberOfRowsCounted INTEGER;
SET @NumberOfRowsCounted = 0;
DECLARE @RecSql NVARCHAR(500);
SET @RecSql = 'EXECUTE(''SELECT @NumberOfRows = COUNT(*) FROM ''[email protected])';
DECLARE @ParmDefinition NVARCHAR(100);
SET @ParmDefinition = '@TableName NVARCHAR(100), @NumberOfRows INTEGER OUTPUT';
DECLARE @TableN NVARCHAR(100);
SET @TableN = 'MITAS_TEST.dbo.AP500';
EXECUTE sp_executesql @RecSql,
@ParmDefinition,
@TableName = @TableN,
@NumberOfRows = @NumberOfRowsCounted OUTPUT;
我收到以下错误:
Msg 137, Level 15, State 1, Line 1
Must declare the scalar variable "@NumberOfRows"
我还以为它足以在@ParmDefinition
场(基于源在此,申报@NumberOfRows
:https://technet.microsoft.com/en-us/library/ms188001(v=sql.90).aspx )。我究竟做错了什么?有没有更好的办法?