我用的是delphi+sql server,我的sql server当中有一个用户表,我有两个delphi的程序,一个程序查询用户表的所有数据,另外一个程序需要屏蔽用户表的一部分程序,例如屏蔽以a、b、c、d打头的用户,保留以e打头的用户,我又不想对delphi程序的所有模块一个一个地进行改动,因为工作量太大,有什么好的办法,例如存储过程之类的?

解决方案 »

  1.   


    create proc get_some(@user int)
    as
    begin
    if(@user = 1)
    select * from tb where 1 = 1
    if(@user = 2)
    select * from tb where 1 = 1 and left(userName,1) = N'e'
    if(..)
    ...
    end
    go
      

  2.   

    我的delphi程序当中对用户表的各种操作都有(select,insert,update..),各种查询方式都有,大哥你写那个存储过程我一头雾水,你这个存储过程我怎么在程序当中调用,where 1 = 1
    又是什么意思?
      

  3.   


    如果是这样,建议去程序里改动对应的查询语句,并加上权限控制,where 1 = 1 没什么特别的,结果和不加一样。
      

  4.   

    程序当中改动作量太大,如果是做两个表,要求表要同步,表一(打头为a、b、c、d、e)包含表二所有数据(打头为e),但是表二的所有操作要同步到表一中。有没有办法在sql server里面弄一个即时同步的办法?
      

  5.   

    从长远考虑,建议还是修改Delphi程序吧,
    否则系统只会越来越复杂,到时出问题都难排查.
      

  6.   

    CREATE TRIGGER [触发器名]
    on 表二 
    after INSERT,DELETE,UPDATE
    as
    begin
      [更新表一的代码]
    end 
      

  7.   

    把数据备份到另外一个表Table1,然后再建个同名视图TAble,这样程序不需要修改,部分数据可以通过视图来屏蔽掉部分列。