sql 同一張表內複製數據 只改一列,操作不同表,共用一個方法實現

需求如下:
現有一批表(都有地區唯一編碼列,和主鍵列),每次根據用戶選擇,操作哪一張

每次用戶會提前選好待填充地區A  參照地區B,具體操作表Table1,需要:
1. 在Table1中刪除地區A的數據
2. 查到Table1中地區B的數據
3. 將2中查到的數據,作爲地區A新增至Table1中


因爲不同表的列不一樣,所以單純寫插入語句【INSERT INTO Table1 (列名,列名,列名)  SELECT 列名,列名,列名 FROM Table1】既慢又不可複用,有幾張表就要寫幾遍,感覺不是很聰明。

這裏我的思路是建個臨時表接數據  修改地區唯一編碼列後  刪掉主鍵 就可以直接用SELECT *出來的東西INSERT進去,代碼如下:

        /// <summary>
        /// 刪除基礎數據表中對應數據 然後再複製一份
        /// </summary>
        /// <param name="xzqh">行政區劃</param>
        /// <param name="czxzqh">參照行政區劃</param>
        /// <param name="ysb">基礎數據表名</param>
        /// <returns></returns>
        public bool DelJCSJ_ByXZQH(string xzqh,string czxzqh,string ysb)
        {
            sbr.Clear();
            ht.Clear();
            //先獲取主鍵列 列名備用
            sbr.AppendLine("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME='" + ysb + "' AND  COLUMNPROPERTY(OBJECT_ID('" + ysb + "'),COLUMN_NAME,'IsIdentity')=1 ;");
            string strZJName = ComVar.sqlda.GetStr(sbr, ht);
            if (!string.IsNullOrWhiteSpace(strZJName))
            {
                sbr.Clear();
                //刪除表中當前行政區劃數據
                sbr.AppendLine("delete FROM " + ysb + " where XZQHDM='" + xzqh + "';");

                //將參照地區數據查出到臨時表
                sbr.AppendLine("SELECT * INTO #" + ysb + "_copy FROM " + ysb + " WHERE XZQHDM = '" + czxzqh + "';  ");
                //刪除無用主鍵標識列
                sbr.AppendLine("ALTER TABLE #" + ysb + "_copy DROP COLUMN  " + strZJName + "; ");
                //行政區劃改爲當前                                                                                 
                sbr.AppendLine("UPDATE #" + ysb + "_copy SET XZQHDM='" + xzqh + "'; ");
                //插入數據
                sbr.AppendLine("INSERT INTO " + ysb + " SELECT * FROM #" + ysb + "_copy; ");
                sbr.AppendLine("DROP TABLE #" + ysb + "_copy; ");
                return ComVar.sqlda.SetDataSet(sbr, ht);
            }
            else
            {
                return false;//沒有主鍵 沒法操作
            }

            
        }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章