我这个存储过程怎么 只完成了自动生成表 而没有数据上来呢? 请问还差什么?谢谢大家帮我看看create proc pp
as
declare @sql varchar(4000)
declare @s1 varchar(100),
@s2 varchar(100),
@s3 varchar(100)
set @s1='a'+convert(varchar(8),getdate(),112) -- 192.168.0.1 中今天生成的表名
set @s2='q'+convert(varchar(8),getdate(),112) -- 192.168.0.2 中今天生成的表名
set @s3='a'+convert(varchar(8),getdate()+1,112) -- 192.168.0.3 中今天生成的表名if object_id(@s3)is null
begin
set @sql='create table '+@s3+'(东桥原煤量 int,东桥原煤量累计 int,老厂石灰石量累计 int,老厂脱硫消耗电量 int,新厂石灰石量累计 int,新厂脱硫消耗电量 int,date datetime)'
exec(@sql)
end-- 判断192.168.0.1 的表存在
if exists (select 1 from openrowset( 'SQLOLEDB', '192.168.0.1'; 'sa';'' , gongkong.dbo.sysobjects) where name=@s1)
begin
set @sql='insert '+@s3+ ' select * from openrowset( ''SQLOLEDB'', ''192.168.0.1''; ''sa'';'''' , ''select 东桥原煤量,东桥原煤量累计, from dongning.dbo.'+@s1+''')'
exec(@sql)
end
-- 判断192.168.0.2 的表存在
if exists (select 1 from openrowset( 'SQLOLEDB', '192.168.0.2'; 'sa';'' , ngongkong.dbo.sysobjects) where name=@s2)
begin
set @sql='insert '+@s3+ ' select * from openrowset( ''SQLOLEDB'', ''192.168.0.2''; ''sa'';'''' , ''select 老厂石灰石量累计,老厂脱硫消耗电量,新厂石灰石量累计,新厂脱硫消耗电量 from ndongning.dbo.'+@s2+''')'
exec(@sql)
end
go
as
declare @sql varchar(4000)
declare @s1 varchar(100),
@s2 varchar(100),
@s3 varchar(100)
set @s1='a'+convert(varchar(8),getdate(),112) -- 192.168.0.1 中今天生成的表名
set @s2='q'+convert(varchar(8),getdate(),112) -- 192.168.0.2 中今天生成的表名
set @s3='a'+convert(varchar(8),getdate()+1,112) -- 192.168.0.3 中今天生成的表名if object_id(@s3)is null
begin
set @sql='create table '+@s3+'(东桥原煤量 int,东桥原煤量累计 int,老厂石灰石量累计 int,老厂脱硫消耗电量 int,新厂石灰石量累计 int,新厂脱硫消耗电量 int,date datetime)'
exec(@sql)
end-- 判断192.168.0.1 的表存在
if exists (select 1 from openrowset( 'SQLOLEDB', '192.168.0.1'; 'sa';'' , gongkong.dbo.sysobjects) where name=@s1)
begin
set @sql='insert '+@s3+ ' select * from openrowset( ''SQLOLEDB'', ''192.168.0.1''; ''sa'';'''' , ''select 东桥原煤量,东桥原煤量累计, from dongning.dbo.'+@s1+''')'
exec(@sql)
end
-- 判断192.168.0.2 的表存在
if exists (select 1 from openrowset( 'SQLOLEDB', '192.168.0.2'; 'sa';'' , ngongkong.dbo.sysobjects) where name=@s2)
begin
set @sql='insert '+@s3+ ' select * from openrowset( ''SQLOLEDB'', ''192.168.0.2''; ''sa'';'''' , ''select 老厂石灰石量累计,老厂脱硫消耗电量,新厂石灰石量累计,新厂脱硫消耗电量 from ndongning.dbo.'+@s2+''')'
exec(@sql)
end
go
两个if条件都是 false
换成print(@sql)
加上print(@sql)。看看执行的什么sql
as
declare @sql varchar(4000)
declare @s1 varchar(100),
@s2 varchar(100),
@s3 varchar(100)
set @s1='a'+convert(varchar(8),getdate(),112) -- 192.168.0.1 中今天生成的表名
set @s2='q'+convert(varchar(8),getdate(),112) -- 192.168.0.2 中今天生成的表名
set @s3='a'+convert(varchar(8),getdate()+1,112) -- 192.168.0.3 中今天生成的表名if object_id(@s3)is null
begin
set @sql='create table '+@s3+'(东桥原煤量 int,东桥原煤量累计 int,老厂石灰石量累计 int,老厂脱硫消耗电量 int,新厂石灰石量累计 int,新厂脱硫消耗电量 int,date datetime)'
exec(@sql)
end-- 判断192.168.0.1 的表存在
if exists (select 1 from openrowset( 'SQLOLEDB', '192.168.0.1'; 'sa';'' , gongkong.dbo.sysobjects) where name=@s1)
begin
set @sql=''
set @sql='insert '+@s3+ ' select * from openrowset( ''SQLOLEDB'', ''192.168.0.1''; ''sa'';'''' , ''select 东桥原煤量,东桥原煤量累计, from dongning.dbo.'+@s1+''')'
exec(@sql)
end
-- 判断192.168.0.2 的表存在
if exists (select 1 from openrowset( 'SQLOLEDB', '192.168.0.2'; 'sa';'' , ngongkong.dbo.sysobjects) where name=@s2)
begin
set @sql=''
set @sql='insert '+@s3+ ' select * from openrowset( ''SQLOLEDB'', ''192.168.0.2''; ''sa'';'''' , ''select 老厂石灰石量累计,老厂脱硫消耗电量,新厂石灰石量累计,新厂脱硫消耗电量 from ndongning.dbo.'+@s2+''')'
exec(@sql)
end
go
楼主加上红色的两行代码后再运行试试吧。
if exists (select 1 from openrowset( 'SQLOLEDB', '192.168.0.1'; 'sa';'' , gongkong.dbo.sysobjects) where name=@s1)
begin
set @sql='insert '+@s3+ ' select * from openrowset( ''SQLOLEDB'', ''192.168.0.1''; ''sa'';'''' , ''select 东桥原煤量,东桥原煤量累计, from dongning.dbo.'+@s1+''')'
exec(@sql)
end 从select语句看你的表应该是建立在192.168.0.1上的dongning这个数据库吧
为什么判断表是否存在是在192.168.0.1上的gongkong这个数据库?用其他库来判断dongning.dbo..'+@s1+''')'?这2个库之间有什么联系吗?没联系的估计if条件为false
在你感觉错误的一行下面print出来调试
没有上面的这种写法,肯定是错误的啊
select 1 from openrowset( 'SQLOLEDB', '192.168.0.1'; 'sa';'' , gongkong.dbo.@s1)
declare @s1 varchar(100),
@s2 varchar(100),
@s3 varchar(100)
set @s1='d'+convert(varchar(8),getdate(),112) -- 192.168.0.1 中今天生成的表名
set @s2='d'+convert(varchar(8),getdate(),112) -- 192.168.0.2 中今天生成的表名
set @s3='a'+convert(varchar(8),getdate(),112) -- 192.168.0.3 中今天生成的表名if object_id(@s3)is null
begin
set @sql='create table '+@s3+'(东桥原煤量 int,东桥原煤量累计 int,老厂石灰石量累计 int,老厂脱硫电量消耗 int,新厂石灰石量累计 int,新厂煤量采集 int,
新厂煤量累计 int, 采集时间 varchar)'
exec(@sql)
end-- 判断192.168.0.1 的表存在
if exists (select 1 from openrowset( 'SQLOLEDB', '192.168.0.1'; 'sa';'' , gongkong.dbo.sysobjects) where name=''''+@s1+'''')--'-@s1
begin
set @sql='insert '+@s3+ ' select * from openrowset( ''SQLOLEDB'', ''192.168.0.1''; ''sa'';'''' , ''select 东桥原煤量,东桥原煤量累计,
老厂石灰石量累计,老厂脱硫电量消耗,新厂石灰石量累计,采集时间 from gongkong.dbo.'+@s1+''')'
print @sql
exec(@sql)
end
-- 判断192.168.0.2 的表存在
if exists (select 1 from openrowset( 'SQLOLEDB', '192.168.0.2'; 'sa';'' , ngongkong.dbo.sysobjects) where name=''''+@s2+'''')--'-@s1
begin
set @sql='insert '+@s3+ ' select * from openrowset( ''SQLOLEDB'', ''192.168.0.2''; ''sa'';'''' , ''select 新厂煤量采集,新厂煤量累计,时间 from ngongkong.dbo.'+@s2+''')'
print @sql
exec(@sql)
end 是不是 时间的问题 》?
这两个表里都有一个 时间字段 但是都是varchar类型的
一个叫 采集时间 一个叫 时间 是不是需要判断他们两个 相等的时候 才可以把数据传到新表 ?怎么判断呢 ?不太会弄了
请大家帮帮忙