CREATE procedure lsj_insert(
@data smalldatetime,@fh varchar(20),@sl int,@ydlx int,@dh varchar(50),@ph varchar(50),@bz varchar(100))
as加()号

解决方案 »

  1.   

    alter procedure lsj_insert(
    @data smalldatetime,@fh varchar(20),@sl int,@ydlx int,@dh varchar(50),@ph varchar(50),@bz varchar(100))
    as
    declare @sql varchar(1000)
    set @sql = (case @ydlx
    when '101' then
    'insert into [table]([1],[2],[3],[4],[5],[6],[7])values('''+convert(char(19),@data,120)+''','''+@fh+''','+rtrim(@sl)+','+rtrim(@ydlx)+','''+@dh+''','''+@ph+''','''+@bz+''')'
    when '102' then
    'insert into table1(1,2,3,4,5,6,7)values(@data,@fh,-@sl,@ydlx,@dh,@ph,@bz)'
    when '103' then
    'insert into table2(1,2,3,4,5,6,7)values(@data,@fh,@sl,@ydlx,@dh,@ph,@bz)'
    when '104' then
    'insert into table3(1,2,3,4,5,6,7)values(@data,@fh,-@sl,@ydlx,@dh,@ph,@bz)'
    when '105' then
    'insert into table4(1,2,3,4,5,6,7)values(@data,@fh,@sl,@ydlx,@dh,@ph,@bz)'
    when '106'then
    'insert into table5(1,2,3,4,5,6,7)values(@data,@fh,-@sl,@ydlx,@dh,@ph,@bz)'
    else ''
    end)
    print(@sql)
    --xec(@sql)
    GO--按101那个改
      

  2.   

    不用動態語句,Case改用If來實現,代碼修改為如下。CREATE procedure lsj_insert 
    @data smalldatetime,@fh varchar(20),@sl int,@ydlx int,@dh varchar(50),@ph varchar(50),@bz varchar(100)
    as
    if @ydlx = '101'
    insert into table1(1,2,3,4,5,6,7)values(@data,@fh,@sl,@ydlx,@dh,@ph,@bz)
    else if @ydlx = '102'
    insert into table1(1,2,3,4,5,6,7)values(@data,@fh,-@sl,@ydlx,@dh,@ph,@bz)
    else if @ydlx = '103'
    insert into table2(1,2,3,4,5,6,7)values(@data,@fh,@sl,@ydlx,@dh,@ph,@bz)
    else if @ydlx = '104'
    insert into table3(1,2,3,4,5,6,7)values(@data,@fh,-@sl,@ydlx,@dh,@ph,@bz)
    else if @ydlx = '105'
    insert into table4(1,2,3,4,5,6,7)values(@data,@fh,@sl,@ydlx,@dh,@ph,@bz)
    else if @ydlx = '106'
    insert into table5(1,2,3,4,5,6,7)values(@data,@fh,-@sl,@ydlx,@dh,@ph,@bz)
    GO
      

  3.   

    --简化下alter procedure lsj_insert(
    @data smalldatetime,@fh varchar(20),@sl int,@ydlx int,@dh varchar(50),@ph varchar(50),@bz varchar(100))
    as
    declare @sql varchar(1000)
    set @sql = 'insert into '+case when @ydlx=101 then '[table]'
    when @ydlx=102 then '[table1]'
    when @ydlx=103 then '[table2]'
    when @ydlx=104 then '[table3]'
    when @ydlx=105 then '[table4]'
    when @ydlx=106 then '[table5]' end
    +'([1],[2],[3],[4],[5],[6],[7])values('''+convert(char(19),@data,120)+''','''+@fh+''','+
    case when @ydlx in (101,103,105) then rtrim(@sl)
    else rtrim(-@sl) end
    +','+rtrim(@ydlx)+','''+@dh+''','''+@ph+''','''+@bz+''')'
    print(@sql)
    --xec(@sql)
    GO
      

  4.   

    gahade(与君共勉) :
    如何给你分数啊!!
      

  5.   

    to:paoluo(一天到晚游泳的鱼)
    我知道的,呵呵,谢谢啊,你哪个我试过了,可以成功的!!
      

  6.   

    一开始我用IF 的时候写错了,多加了个THEN,呵呵,SQL和VB以及别的不一样啊,呵呵
      

  7.   

    對,SQL中IF的寫法和編程語言中些區別的。 :)
      

  8.   

    paoluo(一天到晚游泳的鱼):
    你有联系方式么?最好是MSN,有问题在问你啊,不知道行不行啊,老大!!
      

  9.   

    有MSN,但是不常登,你在CSDN加我或者給我發消息吧。
      

  10.   

    把MSN也告诉我啊,以后常联系啊!!