SQL语句求助

fengliangfl 2009-02-10 10:50:55
有200个数据库,USER01 到 user200,每个库里都有相同结构的 BB 这个表(字段为A(tinyint),B(tinyint)),有的库中这个表已经有了数据, 现在要将这个BB表没有数据的对应库里的这个表都添加5行数据(1,1)(2,0)(3,0)(4,0)(5,0),请问下 能不能用一段SQL语句执行所有库的这样操作?
...全文
90 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengliangfl 2009-02-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zjcxc 的回复:]
SQL code
EXEC sp_msforeachdb N'
IF N''?'' NOT LIKE ''USER%''
RETURN;

USE ?;
INSERT BB
SELECT 1, 1 UNION ALL
SELECT 2, 0 UNION ALL
SELECT 3, 0 UNION ALL
SELECT 4, 0 UNION ALL
SELECT 5, 0;
'
[/Quote]

已测试成功。谢谢了
duanzhi1984 2009-02-10
  • 打赏
  • 举报
回复
请看下面的
USE master
declare @str varchar(200)
declare @dataname varchar(20)
declare cr cursor fast_forward for
select name+'.dbo.BB' from sysdatabases

open cr
fetch next from cr into @dataname
while @@fetch_status<>-1
begin
print @str
exec('select top 1* from '+@dataname)

if @@rowcount=0
begin
select @str='insert into '+@dataname +'
select 1 ,1 union all
select 2,0 union all
select 3,0 union all
select 4,0 union all
select 5,0'
print @str
exec('insert into '+@dataname +'
select 1,1 union all
select 2,0 union all
select 3,0 union all
select 4,0 union all
select 5,0')
end

fetch next from cr into @dataname
end
close cr
deallocate cr



duanzhi1984 2009-02-10
  • 打赏
  • 举报
回复
我试一下:
USE master
declare @str varchar(200)
declare @dataname varchar(20)
declare cr cursor fast_forward for
select name+'.dbo.BB' from sysdatabases WHERE name='IT_PUBLIC'

open cr
fetch next from cr into @dataname
while @@fetch_status<>-1
begin
print @str
exec('select top 1* from '+@dataname)

if @@rowcount=0
begin
select @str='insert into '+@dataname +'
select 1 ,1 union all
select 2,0 union all
select 3,0 union all
select 4,0 union all
select 5,0'
print @str
exec('insert into '+@dataname +'
select 1,1 union all
select 2,0 union all
select 3,0 union all
select 4,0 union all
select 5,0')
end

fetch next from cr into @dataname
end
close cr
deallocate cr

select *from IT_PUBLIC.dbo.BB


fengliangfl 2009-02-10
  • 打赏
  • 举报
回复
我试试。。
lgxyz 2009-02-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 fengliangfl 的回复:]
引用 3 楼 zjcxc 的回复:
SQL code
EXEC sp_msforeachdb N'
IF N''?'' NOT LIKE ''USER%''
RETURN;

USE ?;
INSERT BB
SELECT 1, 1 UNION ALL
SELECT 2, 0 UNION ALL
SELECT 3, 0 UNION ALL
SELECT 4, 0 UNION ALL
SELECT 5, 0;
'

我现在也不知道哪些库中这个BB表有数据,这样行吗?
[/Quote]

EXEC sp_msforeachdb N'
-- 不是需要的数据库, 则跳过
IF N''?'' NOT LIKE ''USER%''
RETURN;

USE ?;
IF NOT EXISTS( -- 没有数据插入
SELECT * FROM BB)
INSERT BB
SELECT 1, 1 UNION ALL
SELECT 2, 0 UNION ALL
SELECT 3, 0 UNION ALL
SELECT 4, 0 UNION ALL
SELECT 5, 0;
'

老大里的这个
IF NOT EXISTS( -- 没有数据插入
SELECT * FROM BB)
这 句就是判断表BB有没有数据的
这个就是没有数据执行下面的INSERT 语句就是 插入了
zjcxc 元老 2009-02-10
  • 打赏
  • 举报
回复
不过你也可以再判断的啦

EXEC sp_msforeachdb N'
-- 不是需要的数据库, 则跳过
IF N''?'' NOT LIKE ''USER%''
RETURN;

USE ?;
IF OBJECT_ID(''BB'') IS NOT NULL -- 判断表是否存在
EXEC(N''
IF NOT EXISTS( -- 没有数据插入
SELECT * FROM BB)
INSERT BB
SELECT 1, 1 UNION ALL
SELECT 2, 0 UNION ALL
SELECT 3, 0 UNION ALL
SELECT 4, 0 UNION ALL
SELECT 5, 0;
'');
'
水族杰纶 2009-02-10
  • 打赏
  • 举报
回复
看老大的~~
zjcxc 元老 2009-02-10
  • 打赏
  • 举报
回复
[Quote=引用楼主 fengliangfl 的帖子:]
有200个数据库,USER01 到 user200,每个库里都有相同结构的 BB 这个表(字段为A(tinyint),B(tinyint)),有的库中这个表已经有了数据, 现在要将这个BB表没有数据的对应库里的这个表都添加5行数据(1,1)(2,0)(3,0)(4,0)(5,0),请问下 能不能用一段SQL语句执行所有库的这样操作?
[/Quote]

你的问题不是已经说明了, USER01-200 的库都有吗? 怎么又变了?
fengliangfl 2009-02-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zjcxc 的回复:]
SQL code
EXEC sp_msforeachdb N'
IF N''?'' NOT LIKE ''USER%''
RETURN;

USE ?;
INSERT BB
SELECT 1, 1 UNION ALL
SELECT 2, 0 UNION ALL
SELECT 3, 0 UNION ALL
SELECT 4, 0 UNION ALL
SELECT 5, 0;
'
[/Quote]
我现在也不知道哪些库中这个BB表有数据,这样行吗?
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dawugui 的回复:]
用循环,一个一个判断来搞?
[/Quote]
.
dawugui 2009-02-10
  • 打赏
  • 举报
回复
回复完了才看到四钻出手了,不好意思.
dawugui 2009-02-10
  • 打赏
  • 举报
回复
大致代码是(未测试):

declare @i as int
declare @cnt as int
set @i = 1
set @cnt = 0

while @i <= 200
begin
exec('use ' + right('000' + cast(@i as varchar),3))
select @cnt = count(*) from bb
if @cnt = 0
begin
insert into bb values(1,1)
insert into bb values(2,0)
insert into bb values(3,0)
insert into bb values(4,0)
insert into bb values(5,0)
end
set @i = @i + 1
set @cnt = 0
end
hero_shaoshuai 2009-02-10
  • 打赏
  • 举报
回复
如果你想用1个语句同时操控多个个表的话,就要用到存储过程或者是触发器
ws_hgo 2009-02-10
  • 打赏
  • 举报
回复
看钻钻的
fengliangfl 2009-02-10
  • 打赏
  • 举报
回复
是的。请给出语句来
zjcxc 元老 2009-02-10
  • 打赏
  • 举报
回复
少了一个判断

EXEC sp_msforeachdb N'
-- 不是需要的数据库, 则跳过
IF N''?'' NOT LIKE ''USER%''
RETURN;

USE ?;
IF NOT EXISTS( -- 没有数据插入
SELECT * FROM BB)
INSERT BB
SELECT 1, 1 UNION ALL
SELECT 2, 0 UNION ALL
SELECT 3, 0 UNION ALL
SELECT 4, 0 UNION ALL
SELECT 5, 0;
'
zjcxc 元老 2009-02-10
  • 打赏
  • 举报
回复

EXEC sp_msforeachdb N'
IF N''?'' NOT LIKE ''USER%''
RETURN;

USE ?;
INSERT BB
SELECT 1, 1 UNION ALL
SELECT 2, 0 UNION ALL
SELECT 3, 0 UNION ALL
SELECT 4, 0 UNION ALL
SELECT 5, 0;
'
weipt 2009-02-10
  • 打赏
  • 举报
回复
关注一下
dawugui 2009-02-10
  • 打赏
  • 举报
回复
用循环,一个一个判断来搞?

34,575

社区成员

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

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