我想把每天数据库的大小自动保存到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 过程名
列名的数量和数据类型要与过程执行后的列名和数据类型分别相对.
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
是返回2個結果集合(如下面),如何把它保存到表中
database_name database_size unallocated_space
xxxxxxxxxxx 180.69MB 15.19MB
reserved data index_size unused
177407KB 144040KB 18688KB 14680KB
#4
一种是:返回的列数,与你的表的列数不同
第二种:要插入的字段大小与你定义的大小不符
第二种:要插入的字段大小与你定义的大小不符
#5
还有就是数据类型
#6
用游标把第一列取出来。
#7
好像不对啊,帮顶。学习
#8
exec sp_spaceused 不能帶參數運行,若帶參數運行就是table的大小了,
我要的是數據庫的大小
如何可以實現我要求的功能,不一定一個語句,一個存儲過程實現也可以呀。
我要的是數據庫的大小
如何可以實現我要求的功能,不一定一個語句,一個存儲過程實現也可以呀。
#9
請指導如何用戶遊標cusor取?
#10
用下面的也不行,真的沒有解決辦法嗎?
insert into db_size (database_name,database_size,unallocated_space)
exec sp_spaceused
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')
SELECT * FROM OPENROWSET('sqloledb.1','server=服务器名;database=master;uid=用户名;pwd=密码','exec sp_spaceused')
#12
强烈顶
#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的内容
sp_helptext 'sp_spaceused'可以看sp_spaceused的内容
#15
from sys.partitions ......
這個表是在那個數據庫,我的是sql server 2000
查詢了一下master,msdb,model,都沒有這個表
這個表是在那個數據庫,我的是sql server 2000
查詢了一下master,msdb,model,都沒有這個表
#16
正解。。
#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'
正解..........................
結貼!!!!
正解..........................
結貼!!!!
#19
路过看看..............
#20
#1
Column name or number of supplied values does not match table definition
明说都,返回的列数,与你的表的列数不同
明说都,返回的列数,与你的表的列数不同
#2
返回的列数,与你的表的列数不同:
insert into db_size(列名...) exec sp_spaceused 过程名
列名的数量和数据类型要与过程执行后的列名和数据类型分别相对.
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
是返回2個結果集合(如下面),如何把它保存到表中
database_name database_size unallocated_space
xxxxxxxxxxx 180.69MB 15.19MB
reserved data index_size unused
177407KB 144040KB 18688KB 14680KB
#4
一种是:返回的列数,与你的表的列数不同
第二种:要插入的字段大小与你定义的大小不符
第二种:要插入的字段大小与你定义的大小不符
#5
还有就是数据类型
#6
用游标把第一列取出来。
#7
好像不对啊,帮顶。学习
#8
exec sp_spaceused 不能帶參數運行,若帶參數運行就是table的大小了,
我要的是數據庫的大小
如何可以實現我要求的功能,不一定一個語句,一個存儲過程實現也可以呀。
我要的是數據庫的大小
如何可以實現我要求的功能,不一定一個語句,一個存儲過程實現也可以呀。
#9
請指導如何用戶遊標cusor取?
#10
用下面的也不行,真的沒有解決辦法嗎?
insert into db_size (database_name,database_size,unallocated_space)
exec sp_spaceused
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')
SELECT * FROM OPENROWSET('sqloledb.1','server=服务器名;database=master;uid=用户名;pwd=密码','exec sp_spaceused')
#12
强烈顶
#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的内容
sp_helptext 'sp_spaceused'可以看sp_spaceused的内容
#15
from sys.partitions ......
這個表是在那個數據庫,我的是sql server 2000
查詢了一下master,msdb,model,都沒有這個表
這個表是在那個數據庫,我的是sql server 2000
查詢了一下master,msdb,model,都沒有這個表
#16
正解。。
#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'
正解..........................
結貼!!!!
正解..........................
結貼!!!!
#19
路过看看..............