19四月/090
SQL SERVER 2005 交易式複寫小研究
版本:SQL SERVER 2005-sp3-4035
在「已發布」的複寫資料表內,直接使用右鍵->設計(開啟GUI介面),改完之後直接儲存
- 新增欄位(接在rowguid資料行之後):可成功儲存,並會自動發佈
- 刪除欄位:可成功儲存,並會自動發佈
- 移動欄位順序:無法儲存,失敗
- bug:刪除欄位後,會把「自動計算」的資料行設為未發布複寫,但是新增欄位的動作不會有此狀況
[已發布]的函數,右鍵->修改
- 修改內容:如果此函數沒有被其他資料表使用(計算資料行),則可成功套用
- 修改內容(已被資料表使用):無法執行,會有錯誤訊息
- 刪除:會告知已被用於複寫,無法刪除
發行項屬性
- 新增/取消勾選項目:需要重新建立快照集,但不用重新初始化
- 取消勾選「已發布」的資料表內的「欄位」:需要重新建立快照集+重新初始化
總結:
- 盡量不要在資料表內使用「有參考使用者自訂函數」的計算資料行,很容易造成複寫同步失敗
- 已發布項目,直接用GUI介面修改即可,會自動套用變更(但注意如果改資料表,欄位前後順序不要動)
- 注意前面提到的刪除欄位會造成的bug
- 新增發布項目,需要重新建立快照集,但不用重新初始化
7四月/080
T-SQL DateDiff函式小研究
SELECT DateDiff(year,'2006/12/31 00:00:00','2006/12/31 23:59:59') = 0
SELECT DateDiff(year,'2006/12/31 00:00:00','2007/1/1 00:00:00') = 1
SELECT DateDiff(year,'2007/1/1 00:00:00','2007/12/31 23:59:59') = 0
- 在該年內都算0
- 注意:只要跨越當年就算1,不論天數(所以只差一天也可以視為year+1)
- 同理,day為單位的話,也是只要跨越當天就算1,不論秒數(所以只差1秒也可以算day +1)