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

时间:2021-10-16 15:29:54
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.

19 个解决方案

#1


 Column name or number of supplied values does not match table definition

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

#2


返回的列数,与你的表的列数不同:

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

列名的数量和数据类型要与过程执行后的列名和数据类型分别相对.

#3


exec sp_spaceused
是返回2個結果集合(如下面),如何把它保存到表中

database_name database_size unallocated_space
xxxxxxxxxxx 180.69MB 15.19MB

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

#4


一种是:返回的列数,与你的表的列数不同
第二种:要插入的字段大小与你定义的大小不符

#5


还有就是数据类型

#6


引用 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

用游标把第一列取出来。

#7


好像不对啊,帮顶。学习

#8


exec sp_spaceused 不能帶參數運行,若帶參數運行就是table的大小了,
我要的是數據庫的大小

如何可以實現我要求的功能,不一定一個語句,一個存儲過程實現也可以呀。

#9


請指導如何用戶遊標cusor取?

引用 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……

#10


用下面的也不行,真的沒有解決辦法嗎?
insert into db_size (database_name,database_size,unallocated_space) 
      exec sp_spaceused

#11


INSERT INTO 表
SELECT * FROM   OPENROWSET('sqloledb.1','server=服务器名;database=master;uid=用户名;pwd=密码','exec sp_spaceused')

#12


引用 11 楼 xxyj6450 的回复:
INSERT INTO 表
SELECT * FROM OPENROWSET('sqloledb.1','server=服务器名;database=master;uid=用户名;pwd=密码','exec sp_spaceused')

强烈顶

#13


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') 

#14


这个东西你只要查看一下sp_spaceused中是如何写的,把它摘下来就行了
sp_helptext 'sp_spaceused'可以看sp_spaceused的内容

#15


from sys.partitions  ......
這個表是在那個數據庫,我的是sql server 2000
查詢了一下master,msdb,model,都沒有這個表



引用 13 楼 ldslove 的回复:
SQL code
declare   
@pages bigint   
,@dbsize bigint  
,@logsize bigint  
,@reservedpages  bigint  
,@usedpages  bigint  
select @dbsize = sum(convert(bigint,case when status &amp; 64 = 0 then ……

#16


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


正解。。

#17


帮你摘一下

 
 

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')  

#18


sp_helptext 'sp_spaceused'
正解..........................
結貼!!!!



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


正解。。

#19


路过看看..............

#1


 Column name or number of supplied values does not match table definition

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

#2


返回的列数,与你的表的列数不同:

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

列名的数量和数据类型要与过程执行后的列名和数据类型分别相对.

#3


exec sp_spaceused
是返回2個結果集合(如下面),如何把它保存到表中

database_name database_size unallocated_space
xxxxxxxxxxx 180.69MB 15.19MB

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

#4


一种是:返回的列数,与你的表的列数不同
第二种:要插入的字段大小与你定义的大小不符

#5


还有就是数据类型

#6


引用 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

用游标把第一列取出来。

#7


好像不对啊,帮顶。学习

#8


exec sp_spaceused 不能帶參數運行,若帶參數運行就是table的大小了,
我要的是數據庫的大小

如何可以實現我要求的功能,不一定一個語句,一個存儲過程實現也可以呀。

#9


請指導如何用戶遊標cusor取?

引用 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……

#10


用下面的也不行,真的沒有解決辦法嗎?
insert into db_size (database_name,database_size,unallocated_space) 
      exec sp_spaceused

#11


INSERT INTO 表
SELECT * FROM   OPENROWSET('sqloledb.1','server=服务器名;database=master;uid=用户名;pwd=密码','exec sp_spaceused')

#12


引用 11 楼 xxyj6450 的回复:
INSERT INTO 表
SELECT * FROM OPENROWSET('sqloledb.1','server=服务器名;database=master;uid=用户名;pwd=密码','exec sp_spaceused')

强烈顶

#13


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') 

#14


这个东西你只要查看一下sp_spaceused中是如何写的,把它摘下来就行了
sp_helptext 'sp_spaceused'可以看sp_spaceused的内容

#15


from sys.partitions  ......
這個表是在那個數據庫,我的是sql server 2000
查詢了一下master,msdb,model,都沒有這個表



引用 13 楼 ldslove 的回复:
SQL code
declare   
@pages bigint   
,@dbsize bigint  
,@logsize bigint  
,@reservedpages  bigint  
,@usedpages  bigint  
select @dbsize = sum(convert(bigint,case when status &amp; 64 = 0 then ……

#16


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


正解。。

#17


帮你摘一下

 
 

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')  

#18


sp_helptext 'sp_spaceused'
正解..........................
結貼!!!!



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


正解。。

#19


路过看看..............

#20