--if exists (select name from sysobjects where name ='p_lee_update_prodect' and type ='P')
--   DROP proc p_lee_update_prodect
--gocreate proc p_lee_update_prodect
as
  begin
  if exists (select name from sysobjects where name ='v_prodect_info' and type ='V')
  DROP VIEW v_prodect_info
  
  create VIEW v_prodect_info 
  as
  select * from sbd_prodect_info  declare
  @ll_row int
  select @ll_row = count(distinct(a.code_id)) from sbd_prodect_original a,sbd_prodect_info b where a.code_id <> b.code_id
  if @ll_row > = 1
SELECT distinct information.code_id,   
information.code_name,
'三边封',
information.spec_longth,   
information.spec_width, 
10000,
'A',
information.publish_longth,   
information.publish_per,   
case when information.made_order ='横' then 1
else 2 end,  
case when information.made_layer ='单' then 1
  when information.made_layer ='双' then 2
  when information.made_layer ='三' then 3
  when information.made_layer ='四' then 4
else 5 end,   
case when information.made_type ='是' then 'yes'
else 'no' end,   
information.color_count,   
information.ink_type,   
information.color_note
into sbd_prodect_info
FROM sbd_prodect_original join v_prodect_info as information
on sbd_prodect_original.code_id <> v_prodect_info.code_id
end提示错误:服务器: 消息 156,级别 15,状态 1,过程 p_lee_update_prodect,行 11
在关键字 'VIEW' 附近有语法错误。

解决方案 »

  1.   


    create proc p_lee_update_prodect 
    as 
      begin 
      if exists (select name from sysobjects where name ='v_prodect_info' and type ='V') 
      DROP VIEW v_prodect_info 
      EXEC('
      create VIEW v_prodect_info 
      as 
      select * from sbd_prodect_info 
    ')
      declare 
      @ll_row int 
      select @ll_row = count(distinct(a.code_id)) from sbd_prodect_original a,sbd_prodect_info b where a.code_id <> b.code_id 
      if @ll_row > = 1 
    SELECT distinct information.code_id,  
    information.code_name, 
    '三边封', 
    information.spec_longth,  
    information.spec_width, 
    10000, 
    'A', 
    information.publish_longth,  
    information.publish_per,  
    case when information.made_order ='横' then 1 
    else 2 end,  
    case when information.made_layer ='单' then 1 
      when information.made_layer ='双' then 2 
      when information.made_layer ='三' then 3 
      when information.made_layer ='四' then 4 
    else 5 end,  
    case when information.made_type ='是' then 'yes' 
    else 'no' end,  
    information.color_count,  
    information.ink_type,  
    information.color_note 
    into sbd_prodect_info 
    FROM sbd_prodect_original join v_prodect_info as information 
    on sbd_prodect_original.code_id <> v_prodect_info.code_id 
    end 
      

  2.   

    create 对象  必须是批中的首条语句,所以你的写法不能成功。你kg那样改为动态语句。
      

  3.   

    只可改为动态只能用动态create view前面只有是注释和go
      

  4.   

    楼上二位在帮忙看看,还是有问题啊
     提示错误:服务器: 消息 107,级别 16,状态 3,过程 p_lee_update_prodect,行 19
    列前缀 'v_prodect_info' 与查询中所用的表名或别名不匹配。
      

  5.   

    create proc p_lee_update_prodect 
    as 
      begin 
      if exists (select name from sysobjects where name ='v_prodect_info' and type ='V') 
      DROP VIEW v_prodect_info 
      EXEC('
      create VIEW v_prodect_info 
      as 
      select * from sbd_prodect_info 
        ')
      declare 
      @ll_row int 
      select @ll_row = count(distinct(a.code_id)) from sbd_prodect_original a,sbd_prodect_info b where a.code_id <> b.code_id 
      if @ll_row > = 1 
    SELECT distinct information.code_id,  
    information.code_name, 
    '三边封', 
    information.spec_longth,  
    information.spec_width, 
    10000, 
    'A', 
    information.publish_longth,  
    information.publish_per,  
    case when information.made_order ='横' then 1 
    else 2 end,  
    case when information.made_layer ='单' then 1 
      when information.made_layer ='双' then 2 
      when information.made_layer ='三' then 3 
      when information.made_layer ='四' then 4 
    else 5 end,  
    case when information.made_type ='是' then 'yes' 
    else 'no' end,  
    information.color_count,  
    information.ink_type,  
    information.color_note 
    into sbd_prodect_info 
    FROM sbd_prodect_original join v_prodect_info as information 
    on sbd_prodect_original.code_id <> information.code_id 
    end 
      

  6.   

    try:create proc p_lee_update_prodect
    as
      begin
      if exists (select name from sysobjects where name ='v_prodect_info' and type ='V')
       exec('DROP VIEW v_prodect_info')
     
      exec('create VIEW v_prodect_info
      as
      select * from sbd_prodect_info')  declare
      @ll_row int
      select @ll_row = count(distinct(a.code_id)) from sbd_prodect_original a,sbd_prodect_info b where a.code_id <> b.code_id
      if @ll_row > = 1
    SELECT distinct information.code_id, 
    information.code_name,
    '三边封',
    information.spec_longth, 
    information.spec_width,
    10000,
    'A',
    information.publish_longth, 
    information.publish_per, 
    case when information.made_order ='横' then 1 else 2 end, 
    case 
    when information.made_layer ='单' then 1
    when information.made_layer ='双' then 2
    when information.made_layer ='三' then 3
    when information.made_layer ='四' then 4
    else 5 
    end, 
    case when information.made_type ='是' then 'yes' else 'no' end, 
    information.color_count, 
    information.ink_type, 
    information.color_note
    into sbd_prodect_info
    FROM sbd_prodect_original 
    join v_prodect_info as information  --这里用了别名
    on sbd_prodect_original.code_id <> information.code_id  --因为上面用了别名,所以被别名接管了,表名找不到
    end
      

  7.   

    服务器: 消息 207,级别 16,状态 3,过程 p_lee_update_prodect,行 16
    列名 'code_name' 无效。
    服务器: 消息 207,级别 16,状态 1,过程 p_lee_update_prodect,行 16
    列名 'made_order' 无效。
    服务器: 消息 207,级别 16,状态 1,过程 p_lee_update_prodect,行 16
    列名 'made_layer' 无效。
    服务器: 消息 207,级别 16,状态 1,过程 p_lee_update_prodect,行 16
    列名 'made_layer' 无效。
    服务器: 消息 207,级别 16,状态 1,过程 p_lee_update_prodect,行 16
    列名 'made_layer' 无效。
    服务器: 消息 207,级别 16,状态 1,过程 p_lee_update_prodect,行 16
    列名 'made_layer' 无效。
    服务器: 消息 207,级别 16,状态 1,过程 p_lee_update_prodect,行 16
    列名 'made_type' 无效。
    服务器: 消息 207,级别 16,状态 1,过程 p_lee_update_prodect,行 16
    列名 'color_note' 无效。
    服务器: 消息 8155,级别 16,状态 1,过程 p_lee_update_prodect,行 16
    没有为第 3 列(属于 'sbd_prodect_info')指定列。
    服务器: 消息 8155,级别 16,状态 1,过程 p_lee_update_prodect,行 16
    没有为第 6 列(属于 'sbd_prodect_info')指定列。
    服务器: 消息 8155,级别 16,状态 1,过程 p_lee_update_prodect,行 16
    没有为第 7 列(属于 'sbd_prodect_info')指定列。
    服务器: 消息 8155,级别 16,状态 1,过程 p_lee_update_prodect,行 16
    没有为第 10 列(属于 'sbd_prodect_info')指定列。
    服务器: 消息 8155,级别 16,状态 1,过程 p_lee_update_prodect,行 16
    没有为第 11 列(属于 'sbd_prodect_info')指定列。
    服务器: 消息 8155,级别 16,状态 1,过程 p_lee_update_prodect,行 16
    没有为第 12 列(属于 'sbd_prodect_info')指定列。
      

  8.   


    头大,你先不要在存储过程中创建view,就用基表(sbd_prodect_info),试下会不会有问题。
      

  9.   

    动态sql语句基本语法 
    1 :普通SQL语句可以用Exec执行 eg:   Select * from tableName 
             Exec('select * from tableName') 
             Exec sp_executesql N'select * from tableName'    -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg:   
    declare @fname varchar(20) 
    set @fname = 'FiledName' 
    Select @fname from tableName              -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 
    Exec('select ' + @fname + ' from tableName')     -- 请注意 加号前后的 单引号的边上加空格 当然将字符串改成变量的形式也可 
    declare @fname varchar(20) 
    set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s)                -- 成功 
    exec sp_executesql @s   -- 此句会报错 declare @s Nvarchar(1000)  -- 注意此处改为nvarchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s)                -- 成功     
    exec sp_executesql @s   -- 此句正确 3. 输出参数 
    declare @num int, 
            @sqls nvarchar(4000) 
    set @sqls='select count(*) from tableName' 
    exec(@sqls) 
    --如何将exec执行结果放入变量中? declare @num int, 
                   @sqls nvarchar(4000) 
    set @sqls='select @a=count(*) from tableName ' 
    exec sp_executesql @sqls,N'@a int output',@num output 
    select @num 
      

  10.   

    问题已解决,谢谢楼上各位大虾了,尤其是Garnett_KG,谢谢!
    结贴去了,嘿嘿