none
存储过程中把表做为参数的拼接 RRS feed

  • 问题

  • 拼了半天拼不成。请高手指点下,具体的sql 语名如下,现在想把两个表名做为参数传进来

     delete from table1 where id=@configID
        declare @rowCount int
        select @rowCount=count(*) from table1 where id=@configID
        if @rowCount=1
      delete from table2 where ConfigID=(select ParentID from table1 where id=@configID)

    2011年1月5日 3:23

答案

  • go
    IF OBJECT_ID('P_DelTabData','P') IS NOT NULL
      DROP PROCEDURE P_DelTabData
    go
    
    CREATE PROCEDURE P_DelTabData
    (
      @TabColl sysname,--表名+列名(dbo.表名.ID/表名.ParentID )--不處理關健字表名
      @TabCol2 sysname,--表名+列名(dbo.表名.ID/表名.ConfigID )
      @Where nvarchar(1000)--id=5
    )
    AS
    DECLARE @Sql NVARCHAR(4000)
    SET @Sql='IF (select count(*) from '+LEFT(@TabColl,LEN(@TabColl)-CHARINDEX('.',REVERSE(@TabColl)))+' where '+@Where+')>0
      delete '+LEFT(@TabCol2,LEN(@TabCol2)-CHARINDEX('.',REVERSE(@TabCol2)))+' where '+RIGHT(@TabCol2,CHARINDEX('.',REVERSE(@TabCol2))-1)+'=(select ParentID from '+LEFT(@TabColl,LEN(@TabColl)-CHARINDEX('.',REVERSE(@TabColl)))+' where '+@Where+')'
    EXEC( @sql)
    
    GO
    EXEC P_DelTabData @TabColl='table1.ParentID ',@TabCol2='table2.ConfigID',@Where='id=5'
    
    


    ROY WU(吳熹)
    2011年1月5日 10:45
    版主

全部回复

  • Need dynamic sql for that.

    2011年1月5日 3:28
  • 可以用Exec()解决
    2011年1月5日 7:19
  • go
    IF OBJECT_ID('P_DelTabData','P') IS NOT NULL
      DROP PROCEDURE P_DelTabData
    go
    
    CREATE PROCEDURE P_DelTabData
    (
      @TabColl sysname,--表名+列名(dbo.表名.ID/表名.ParentID )--不處理關健字表名
      @TabCol2 sysname,--表名+列名(dbo.表名.ID/表名.ConfigID )
      @Where nvarchar(1000)--id=5
    )
    AS
    DECLARE @Sql NVARCHAR(4000)
    SET @Sql='IF (select count(*) from '+LEFT(@TabColl,LEN(@TabColl)-CHARINDEX('.',REVERSE(@TabColl)))+' where '+@Where+')>0
      delete '+LEFT(@TabCol2,LEN(@TabCol2)-CHARINDEX('.',REVERSE(@TabCol2)))+' where '+RIGHT(@TabCol2,CHARINDEX('.',REVERSE(@TabCol2))-1)+'=(select ParentID from '+LEFT(@TabColl,LEN(@TabColl)-CHARINDEX('.',REVERSE(@TabColl)))+' where '+@Where+')'
    EXEC( @sql)
    
    GO
    EXEC P_DelTabData @TabColl='table1.ParentID ',@TabCol2='table2.ConfigID',@Where='id=5'
    
    


    ROY WU(吳熹)
    2011年1月5日 10:45
    版主