insert into 表 exec sp_spaceused(返回多个结果集)执行出错

magnetmoon 2010-04-06 02:01:44
insert into 表 exec sp_spaceused(返回多个结果集)执行出错


我想把每天数据库的大小自动保存到table中
但是exec sp_spaceused是返回2个表,执行下面的语句出错,如何解决?

drop table db_size
go
create table dbo.db_size (
database_name varchar(200),
database_size varchar(200),
unallocated_space varchar(200)
)
go
insert into db_size exec sp_spaceused
---------------------------------------------------------
Server: Msg 213, Level 16, State 7, Procedure sp_spaceused, Line 196
Insert Error: Column name or number of supplied values does not match table definition.

...全文
791 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
A12580135 2010-04-06
  • 打赏
  • 举报
回复
路过看看..............
magnetmoon 2010-04-06
  • 打赏
  • 举报
回复
sp_helptext 'sp_spaceused'
正解..........................
結貼!!!!



[Quote=引用 16 楼 ldslove 的回复:]
引用 14 楼 chuifengde 的回复:
这个东西你只要查看一下sp_spaceused中是如何写的,把它摘下来就行了
sp_helptext 'sp_spaceused'可以看sp_spaceused的内容


正解。。
[/Quote]
东那个升 2010-04-06
  • 打赏
  • 举报
回复
帮你摘一下




declare @pages int  
declare @dbname sysname
declare @dbsize dec(15,0)
declare @logsize dec(15)
declare @bytesperpage dec(15,0)
declare @pagesperMB dec(15,0)

select @dbsize = sum(convert(dec(15),size))
from dbo.sysfiles
where (status & 64 = 0)

select @logsize = sum(convert(dec(15),size))
from dbo.sysfiles
where (status & 64 <> 0)

select @bytesperpage = low
from master.dbo.spt_values
where number = 1
and type = 'E'
select @pagesperMB = 1048576 / @bytesperpage

select database_name = db_name(),
database_size =
ltrim(str((@dbsize + @logsize) / @pagesperMB,15,2) + ' MB'),
'unallocated space' =
ltrim(str((@dbsize -
(select sum(convert(dec(15),reserved))
from sysindexes
where indid in (0, 1, 255)
)) / @pagesperMB,15,2)+ ' MB')
东那个升 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 chuifengde 的回复:]
这个东西你只要查看一下sp_spaceused中是如何写的,把它摘下来就行了
sp_helptext 'sp_spaceused'可以看sp_spaceused的内容
[/Quote]

正解。。
magnetmoon 2010-04-06
  • 打赏
  • 举报
回复
from sys.partitions ......
這個表是在那個數據庫,我的是sql server 2000
查詢了一下master,msdb,model,都沒有這個表



[Quote=引用 13 楼 ldslove 的回复:]
SQL code
declare
@pages bigint
,@dbsize bigint
,@logsize bigint
,@reservedpages bigint
,@usedpages bigint
select @dbsize = sum(convert(bigint,case when status & 64 = 0 then ……
[/Quote]
chuifengde 2010-04-06
  • 打赏
  • 举报
回复
这个东西你只要查看一下sp_spaceused中是如何写的,把它摘下来就行了
sp_helptext 'sp_spaceused'可以看sp_spaceused的内容
东那个升 2010-04-06
  • 打赏
  • 举报
回复
declare   
@pages bigint
,@dbsize bigint
,@logsize bigint
,@reservedpages bigint
,@usedpages bigint
select @dbsize = sum(convert(bigint,case when status & 64 = 0 then size else 0 end))
, @logsize = sum(convert(bigint,case when status & 64 <> 0 then size else 0 end))
from dbo.sysfiles

select @reservedpages = sum(a.total_pages),
@usedpages = sum(a.used_pages),
@pages = sum(
CASE
When it.internal_type IN (202,204) Then 0
When a.type <> 1 Then a.used_pages
When p.index_id < 2 Then a.data_pages
Else 0
END
)
from sys.partitions p join sys.allocation_units a on p.partition_id = a.container_id
left join sys.internal_tables it on p.object_id = it.object_id

select
database_name = db_name(),
database_size = ltrim(str((convert (dec (15,2),@dbsize) + convert (dec (15,2),@logsize))
* 8192 / 1048576,15,2) + ' MB'),
'unallocated space' = ltrim(str((case when @dbsize >= @reservedpages then
(convert (dec (15,2),@dbsize) - convert (dec (15,2),@reservedpages))
* 8192 / 1048576 else 0 end),15,2) + ' MB')
zhangjiang264 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 xxyj6450 的回复:]
INSERT INTO 表
SELECT * FROM OPENROWSET('sqloledb.1','server=服务器名;database=master;uid=用户名;pwd=密码','exec sp_spaceused')
[/Quote]
强烈顶
三断笛 2010-04-06
  • 打赏
  • 举报
回复
INSERT INTO 表
SELECT * FROM OPENROWSET('sqloledb.1','server=服务器名;database=master;uid=用户名;pwd=密码','exec sp_spaceused')
magnetmoon 2010-04-06
  • 打赏
  • 举报
回复
用下面的也不行,真的沒有解決辦法嗎?
insert into db_size (database_name,database_size,unallocated_space)
exec sp_spaceused
magnetmoon 2010-04-06
  • 打赏
  • 举报
回复
請指導如何用戶遊標cusor取?

[Quote=引用 6 楼 zhangjiang264 的回复:]
引用 3 楼 magnetmoon 的回复:
exec sp_spaceused
是返回2個結果集合(如下面),如何把它保存到表中

database_name database_size unallocated_space
xxxxxxxxxxx 180.69MB 15.19MB

reserved data index_size unused
177407KB 144040KB……
[/Quote]
magnetmoon 2010-04-06
  • 打赏
  • 举报
回复
exec sp_spaceused 不能帶參數運行,若帶參數運行就是table的大小了,
我要的是數據庫的大小

如何可以實現我要求的功能,不一定一個語句,一個存儲過程實現也可以呀。
zhangjiang264 2010-04-06
  • 打赏
  • 举报
回复
好像不对啊,帮顶。学习
zhangjiang264 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 magnetmoon 的回复:]
exec sp_spaceused
是返回2個結果集合(如下面),如何把它保存到表中

database_name database_size unallocated_space
xxxxxxxxxxx 180.69MB 15.19MB

reserved data index_size unused
177407KB 144040KB 18688KB 14680KB
[/Quote]
用游标把第一列取出来。
junlintianxia07 2010-04-06
  • 打赏
  • 举报
回复
还有就是数据类型
junlintianxia07 2010-04-06
  • 打赏
  • 举报
回复
一种是:返回的列数,与你的表的列数不同
第二种:要插入的字段大小与你定义的大小不符
magnetmoon 2010-04-06
  • 打赏
  • 举报
回复
exec sp_spaceused
是返回2個結果集合(如下面),如何把它保存到表中

database_name database_size unallocated_space
xxxxxxxxxxx 180.69MB 15.19MB

reserved data index_size unused
177407KB 144040KB 18688KB 14680KB

htl258_Tony 2010-04-06
  • 打赏
  • 举报
回复
返回的列数,与你的表的列数不同:

insert into db_size(列名...) exec sp_spaceused 过程名

列名的数量和数据类型要与过程执行后的列名和数据类型分别相对.
SQL77 2010-04-06
  • 打赏
  • 举报
回复
Column name or number of supplied values does not match table definition

明说都,返回的列数,与你的表的列数不同

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧