我正在尝试使用表格运行此webpage部分中的代码,我已对其进行了编辑,因此我使用GETADATE()
进行了约会,但不幸的是,它以错误结束Column name or number of supplied values does not match table definition.
我注释掉了Insert
语句和select只返回已转换@DateAdded
(No column name) Oct 25 2017 10:56AM
参数化版本中的相同代码工作正常,动态版本有问题吗?
DECLARE @SQL NVarChar(max)
DECLARE @DateAdded SmallDateTime
SELECT @DateAdded = GETDATE()
SET @SQL = ' Use [?];
DECLARE @DatabaseSize Float
IF OBJECT_ID(''tempdb..#TableSizes'') IS NOT NULL BEGIN
DROP TABLE #TableSizes
END
SELECT DatabaseName = DB_NAME()
, TableName = a2.name
, SchemaName = a3.name
, RowCounts = a1.rows
, TableSizeMB = (a1.reserved + ISNULL(a4.reserved,0)) / 128
, DataSizeMB = a1.data / 128
, IndexSizeMB = (CASE WHEN (a1.used + ISNULL(a4.used,0)) > a1.data
THEN (a1.used + ISNULL(a4.used,0)) - a1.data
ELSE 0
END) /128
INTO #TableSizes
FROM (SELECT ps.object_id
, [rows] = SUM(CASE
WHEN (ps.index_id < 2) THEN row_count
ELSE 0
END)
, reserved = SUM(ps.reserved_page_count)
, data = SUM(CASE
WHEN (ps.index_id < 2)
THEN (ps.in_row_data_page_count + ps.lob_used_page_count + ps.row_overflow_used_page_count)
ELSE (ps.lob_used_page_count + ps.row_overflow_used_page_count)
END)
, used = SUM (ps.used_page_count)
FROM sys.dm_db_partition_stats ps
GROUP BY ps.object_id) AS a1
INNER JOIN sys.all_objects a2 ON a1.object_id = a2.object_id
INNER JOIN sys.schemas a3 ON a2.schema_id = a3.schema_id
LEFT JOIN (SELECT it.parent_id
, reserved = SUM(ps.reserved_page_count)
, used = SUM(ps.used_page_count)
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.internal_tables it ON it.object_id = ps.object_id
WHERE it.internal_type IN (202,204)
GROUP BY it.parent_id) AS a4 ON a4.parent_id = a1.object_id
WHERE a2.type <> ''S'' and a2.type <> ''IT''
SELECT @DatabaseSize = Sum(TableSizeMB) FROM #TableSizes
--INSERT INTO test..[Tables]
SELECT ''' + Cast(@DateAdded as nvarchar(50)) + '''
, DatabaseName
, SchemaName
, TableName
, RowCounts
, TableSizeMB
, DataSizeMB
, IndexSizeMB
, (TableSizeMB/@DatabaseSize) * 100
FROM #TableSizes
WHERE TableSizeMB > .005 * @DatabaseSize
AND TableSizeMB > 100
DROP TABLE #TableSizes'
exec sp_MSforeachdb @SQL
答案 0 :(得分:1)
查询子字符串(2000 char max)
create proc sys.sp_MSforeachdb
@command1 nvarchar(2000), @replacechar nchar(1) = N'?', @command2 nvarchar(2000) = null, @command3 nvarchar(2000) = null,
@precommand nvarchar(2000) = null, @postcommand nvarchar(2000) = null
尝试拆分@ command1,@ command2