国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

利用C#查詢視圖字段基于基表的字段

2024-07-21 02:07:49
字體:
來源:轉載
供稿:網友

    在sql server 2000里,通過sysdepends,syscolumns等這些系統表無法找到多層次視圖的最基底表字段依賴,特別是在視圖采用別名的時候。但在某些環境下,軟件系統又希望達到這個目的,所以只好采用在邏輯過程中分析的思路了,這樣做,無疑效率是比較低的,但卻是一種實現的方法。提供的這段代碼的思路是,分析視圖的create view .. as select ...from ...這個語句,截取select 和from 之間這段來進行處理,然后找到如dbo.yourtableorview.yourcolumn (as xxx) 之類的那一段,再進行進一步分析取到 yourtableorview以及yourcolumn.這樣,再判斷這個yourtableorview是視圖還是表,如果是表,則說明已經找到,如果是視圖,則再調用這個過程來遞歸分析,一直分析到表為止。當然,在這里還要考慮一些視圖的復雜性,比如字段是一個常量,或者是一個計算列,等等沒有基表字段對應的情況,這個在具體寫應用的時候,注意一下即可了。


  /// <summary>
  /// 分析視圖的sql語句,得到某字段對應的基表和基表字段
  /// </summary>
  /// <param name="viewsql">視圖的create view 語句</param>
  /// <param name="viewcolumn">要分析的視圖字段</param>
  /// <param name="sourcetable">要分析的視圖字段所屬的源表(或視圖)</param>
  /// <param name="sourcecolumn">要分析的視圖字段在源表或視圖中的字段名稱</param>
  private bool analyseviewscolumns(string viewsql,string viewcolumn,out string sourcetable,out string sourcecolumn)
  {
   viewsql = viewsql.replace("/r/n",string.empty);
   string sp ="from";
   string sql =viewsql.substring(0,viewsql.indexof(sp));
   sp="select";
   sql = sql.substring(sql.indexof(sp)+6);

///以上這幾步是為了把這個sql 弄"干凈"一些,只對select 和 from 之間進行分析。
   string[] tsql2=sql.split(',');
   foreach(string t in tsql2)
   {
    if(t.indexof(viewcolumn)!=-1)
    {
     sql=t;
     break;
    }
   }

////以上這幾步取到那個包含viewcolumn的 一段 類似 dbo.yourtableorview.yourcolumn (as xxx)的字符串,放在sql中。以下通過'.'把sql 分成三段,進一步分析。
   string[] tsql3 = sql.split('.');
   if(tsql3.length!=3)  ///如果不是這種三段式的,就返回(說明是一些常量列啊,等等)
   {
    sourcetable=string.empty;
    sourcecolumn=string.empty;
    return false;
   }
   else
   {
    sourcetable=tsql3[1];
    if(tsql3[2].indexof(" as ")!=-1)  //如果有as ,即是有別名的
    {
     sp = " as ";
     sourcecolumn = tsql3[2].remove(tsql3[2].indexof(sp),tsql3[2].length-tsql3[2].indexof(sp));
    }
    else
    {
     sourcecolumn = tsql3[2].trim();
    }
    return true;
   }
  }

 

ok了:)

在研究這個問題的過程中,得到了 zjcxc(鄒建) 大俠的幫助。在這里謝過了:)

相關的貼子在:

http://community.csdn.net/expert/topic/3186/3186099.xml?temp=.5037653

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天台县| 九江市| 永川市| 怀集县| 扎鲁特旗| 唐海县| 沙洋县| 棋牌| 固始县| 阿勒泰市| 常州市| 平陆县| 湘乡市| 汶上县| 滦南县| 江达县| 浏阳市| 斗六市| 乃东县| 佛学| 甘孜| 贵州省| 通化县| 晋江市| 界首市| 安康市| 册亨县| 天台县| 额敏县| 永泰县| 池州市| 朝阳县| 甘谷县| 武汉市| 娱乐| 昌江| 公主岭市| 嘉荫县| 松阳县| 柞水县| 十堰市|