2012年1月4日 星期三

SQL NOT EXISTS 怎麼用?

今天在系統的實作上發現需要新增存在於 Product 資料表,
但是不存在於 Promotion 資料表的資料,
直覺就是應該是用到 SQL NOT EXISTS 的方式來處理,
不過左寫右寫的,
不管怎麼寫,不是說我語法不對就是跑出來不是我要的結果?
EXISTS 的線上說明看了又看,
明明就是照著寫,
怎麼出來的就是不是我要的呢?

後來請教了 SQL 大師才終於出現了我想要的結果,
很好奇有人因為看了 EXISTS 的線上說明就會寫的嗎?

好了!廢話不多說,我們先來看看 Product 資料表裡面的內容。
裡面總共有 5 筆資料。


然後 Promotion 資料表裡面總共有 2 筆資料。


所以我想看到的是 ProductNo 2, 4, 5 這 3 筆資料,寫法如下,請享用。

2011年11月24日 星期四

SQL Server DB restore error - 請使用 WITH MOVE 來識別該檔案的有效位置

主要的錯誤訊息應該是這個
檔案 'FrankieDB' 無法還原到 'c:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS_BIN\MSSQL\DATA\FrankieDB.mdf'。請使用 WITH MOVE 來識別該檔案的有效位置。
訊息 3119,層級 16,狀態 1,行 1 

記得在 SQL Server 2000 的時候,
用 Enterprise Manager 來 Restore 的時候有地方可以改丫!



2011年11月18日 星期五

SQL Datetime Convert Varchar

每次要用的時候都要找,所以乾脆記下來好了!


其實我只要
YYYY-MM-DD (2008-06-26):
CONVERT(CHAR(10), GETDATE(), 120)
或是
MM/DD/YYYY (06/26/2008):
CONVERT(CHAR(10), GETDATE(), 101)
這個可能也用的到
YYYYMMDD (20110314):
CONVERT(CHAR(8), GETDATE(), 112)


參考網址:SQL 日期時間轉換 (Convert Date Time to string)

2011年11月4日 星期五

Microsoft.Jet.OLEDB.4.0提供者並未登錄於本機電腦上

今天要用 C# 透過 OLEDB 開啟 Excel 檔案讀取資料,
上網查了一下連接字串大概是這樣寫的
【Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\test.xls;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"】



這一篇對於連接字串的說明說的比較詳細【透過 OleDb 精準讀入 Excel 檔的方法



所以我就依樣畫葫蘆建立一個 OleDbConnection 的變數開始連接 Excel 吧!
程式如下:


            string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR={1};IMEX=1\"";


            connString = string.Format(connString, fileName, hasHeader ? "Yes" : "No");
            OleDbConnection conn = new OleDbConnection(connString);
            conn.Open();




原本以為這樣就結束了,沒想到卻出現了下面這個錯誤訊息!


2011年10月27日 星期四

C# 的 Bookmark 怎麼用?

記得在 Delphi 的時候我們可以對 DataTable 設定書籤,
但是到了 C# 好像就沒有這招可以用了耶?
先說說書籤的用途好了,
簡單的說就是先記錄下來目前這筆 row 的位置,
然後等等可以快速地回到這筆 row 來!
聽起來很簡單吧!
是呀!但是我就是沒找到有 bookmark 的屬性或是函數,
也沒有看到疑似 bookmark 的屬性或是函數咧?
所以決定試一下看看!
然後就寫出了下面的東東:


  1.             DataRow bookmark = CurrentRow;
  2.             grid.BeginUpdate();
  3.             try
  4.             {
  5.                 foreach (DataRow dr in dataTable.Rows)
  6.                 {
  7.                     CurrentRow = dr;
  8.                     DoBringSQL();
  9.                 }
  10.             }
  11.             finally
  12.             {
  13.                 CurrentRow = bookmark;
  14.                 grid.EndUpdate();
  15.             }

2011年10月21日 星期五

(SQL Server)複寫不支援透過伺服器別名、IP 位址或任何其他替代名稱來進行連接

這兩天再設定 SQL Server replication 的時候出現這個錯誤!
原因大概是因為我之前裝好了 SQL Server 之後又跑去改了電腦名稱,
假設原來的電腦名稱叫做 Frankie-Old 好了,
新的電腦名稱叫做 Frankie-New,
所以雖然我用 Microsoft SQL Server Management Studio 可以用 Frankie-New 連上 SQL Server,
但是我用另外一台電腦要設定 replication 連到 Frankie-New 的時候卻會跳出類似下面的訊息,
【複寫不支援透過伺服器別名、IP 位址或任何其他替代名稱來進行連接。Frankie-Old】
真是尷尬呀!
上網 google 了一下,
我們可以下 SELECT @SERVERNAME 來得知我們 SQL Server 的名字,
我查了一下果然是 Frankie-Old 呀!真是尷尬呀~~~
我們可以下 sp_dropserver 'Frankie-Old' 來刪除舊的名稱,
然後 sp_addserver 'Frankie-New', 'local' 來新增,
然後重新啟動這台 SQL Server 吧!
再重新下個 SELECT @@SERVERNAME 就可以看到妳新設定的名字啦!
喔耶!

2011年10月14日 星期五

如何連上 Windows 2008 Server 的 SQL Server 2008?

好啦!簡單的說就是我連不上 Windows 2008 Server 上的 SQL Server 2008 啦!
上網google了一下,
第一先打開TCP/IP的協定,
第二SQL Browser的服務要開,
第三就是打開Windows 2008 Server 的防火牆設定,
就這樣就可以通啦!
參考下面的連結吧!

打開TCP/IP的協定
設定防火牆

微軟的說明如何開啟 Windows Server 2008 上 SQL Server 防火牆連接埠?

可以直接下載這個檔案,
OpenSqlServerPort.rar
執行之後就會把防火牆的prot打開了!