我这个存储过程怎么 只完成了自动生成表 而没有数据上来呢? 请问还差什么?谢谢大家帮我看看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 

解决方案 »

  1.   

    说明
    两个if条件都是 false 
      

  2.   

    exec(@sql)
    换成print(@sql)
      

  3.   

    在每个if语句中的set和exec(sql)间
    加上print(@sql)。看看执行的什么sql
      

  4.   

    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=''
        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 
    楼主加上红色的两行代码后再运行试试吧。
      

  5.   

    -- 判断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 从select语句看你的表应该是建立在192.168.0.1上的dongning这个数据库吧
    为什么判断表是否存在是在192.168.0.1上的gongkong这个数据库?用其他库来判断dongning.dbo..'+@s1+''')'?这2个库之间有什么联系吗?没联系的估计if条件为false 
      

  6.   


    在你感觉错误的一行下面print出来调试
      

  7.   

    if exists (select 1 from openrowset( 'SQLOLEDB', '192.168.0.2'; 'sa';'' , ngongkong.dbo.sysobjects) where name=@s2)这句 是不是有什么问题啊 我把@s2 换成 表名 怎么执行不了呢 ? 提示 ) 处 有问题 
      

  8.   

    select 1 from openrowset( 'SQLOLEDB', '192.168.0.1'; 'sa';'' , gongkong.dbo.sysobjects) where name=@s1
    没有上面的这种写法,肯定是错误的啊
    select 1 from openrowset( 'SQLOLEDB', '192.168.0.1'; 'sa';'' , gongkong.dbo.@s1)
      

  9.   

    declare @sql varchar(4000)
    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类型的 
    一个叫 采集时间  一个叫 时间 是不是需要判断他们两个 相等的时候 才可以把数据传到新表 ?怎么判断呢 ?不太会弄了 
    请大家帮帮忙