星期一, 7月 29, 2013

[SSRS] 無法連線至遠端伺服器

在模擬環境中(Windows 2008 SP2 + SQL Server 2005 SP3)要學習 SSRS 2005,沒想到安裝好之後,竟然連 Report Manager 都進不來,Orz ~~
  • 看見 "無法連線至遠端伺服器" 錯誤訊息時,還想說會次不會是沒有開啟 TCP/IP 導致連不進去,檢查過後發現遠端連線是沒問題的,再檢查 Report Service 組態內設定,也都是正常
[SSRS] 無法連線至遠端伺服器-1
  • C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\LogFiles 內找錯誤訊息發現下圖
[SSRS] 無法連線至遠端伺服器-2

星期五, 7月 26, 2013

[SQL] 稽核資料表 DML 動作

稽核資料表 DML 動作實作練習。
  • 建立 Demo 資料
USE AdventureWorks2012
GO 

IF OBJECT_ID('Customer') IS NOT NULL
  DROP TABLE Customer 

CREATE TABLE Customer 
(
    CustNO char(3) ,
    CustName nchar(8) ,
    HomeAddress nvarchar(100) 
)
INSERT INTO Customer VALUES
    ('001',N'王一明',N'新北市XX路XX號') ,
    ('002',N'張二龍',N'台中市OO路OO號') ,
    ('003',N'趙三虎',N'高雄市AA路AA號')

-- 建立測試 Login 和 User
CREATE LOGIN AuditDemo WITH Password = '1234'
CREATE USER AuditDemo FOR LOGIN AuditDemo

-- 授予 SELECT、INSERT 和 UPDATE 權限,沒有 DELETE 權限 
GRANT SELECT ON dbo.Customer TO AuditDemo
GRANT INSERT ON dbo.Customer TO AuditDemo
GRANT UPDATE ON dbo.Customer TO AuditDemo

星期一, 7月 22, 2013

[C#] Split

老師來信的論壇問題,把一個字串內的資料,兩兩拆解,並分別把資料放進兩個 Textbox 內,拿來練習 Split。
private void Split_Load(object sender, EventArgs e)
{
    string source = "物件ID,A001,物件名稱,B002,物件類別,C003,物件描述,D004,OmniClass Number,A000B000,OmniClass Description,A111B111,寬度,0,高度,0,長度,0,面積,0,體積,0,材質,混凝土,位移,";

    // 利用 Split 把字串拆解
    string[] data = source.Split(',');

    // 判斷是否成對
    if (data.Length % 2 != 0) 
    {
        MessageBox.Show(" 字串內的資料不成對,無法解析");
        return;
    }

    for (int i = 0; i < data.Length; i += 2)
    {
        txtData1.Text += data[i] + "\r\n";
        txtData2.Text += data[i + 1] + "\r\n";
    }
}

星期五, 7月 19, 2013

[SQL] 利用精靈實作 Partition Table

利用 SSMS 或 T-SQL 把 Big Table 水平分割為多個 Partition,放置在不同的 Filegroup 內,讓 Big Table 更容易管理和維護。

建立 Partition Table 過程
  1. 建立 Filegroup 和對應檔案(mdf、ndf),用來放置 Partition,也可以把全部的 Partition 放在一個 Primary Filegroup 內
  2. 建立 Partition Funcation,指定 Partition Column 和 Boundary Value,將資料表、索引資料,對應至 Partition
  3. 建立 Partition Schema,並將 Partition 對應至 Filegroup
  4. 建立、修改資料表或索引
注意事項
  1. SQL Server 2005 開始有 Partition Table 功能,但分割精靈是從 SQL Server 2008 才有,Enterprise、Developer 和 Evaluation 版本上才可以使用 Partition Table
  2. Partiton Funcation 和 Partition Schema 只能用在單一 DB 中
  3. Partition Funcation 和 User Define Function 是不一樣的物件
  4. Partition Column 內如果包含 NULL 資料,指定 Range Left  情況下,資料會配置至最左邊的 Partition;Range Right 情況下,最左邊的 Partition 會保持空白,NULL 資料會配置在第二個 Partition
利用 AdventureWorks2012 Sales.SalesOrderHeader Table 來實作 Partition Table。
  • AdventureWorks2012 => Sales.SalesOrderHeader => 儲存體 => 建立資料分割。
[SQL] 利用精靈實作 Partition Table-1

星期一, 7月 15, 2013

[VS] 註解

註解用來說明程式碼內容,增加程式可讀性。
  • 單行註解
輸入 //(兩個斜線符號)
// Hello World
  • 一整段註解
利用 /* 和 */ 包住要註解的內容
/* 
TW
US
JP
*/
  • XML 註解
輸入 ///(三個斜線符號),就會自動出現

[VS] 註解-1
  • TODO 註解
在註解後面加上 TODO 字樣

[VS] 註解-2

VS 假如沒有看見[工作清單],可以在[檢示]內看見[工作清單]選項。[工作清單]內有兩個選項[使用者工作]和[註解],必須切換到[註解]才可以看到 TODO 註解。

[VS] 註解-3

可以看到剛剛的 TODO 註解,且還有說明寫在哪個行號(26),滑鼠左鍵雙擊就可以跳到該 TODO 註解

星期五, 7月 12, 2013

[SQL] 設定 Trigger 觸發順序

一個 Table 內假如有多個 Trigger 且希望能控制 Trigger 的觸發順序,可以利用 sp_settriggerorder 來控制。
  • 語法
         sp_settriggerorder
                  [ @triggername = ] '[ triggerschema. ] triggername'
                  , [ @order = ] 'value'
                  , [ @stmttype = ] 'statement_type'
                  [ , [ @namespace = ] { 'DATABASE' | 'SERVER' | NULL } ]
  • 引數
    [ @triggername= ] '[ triggerschema.]triggername':TriggerSchema 和 TriggerName
    1. 無法設定 INSTEAD OF Triiger 的觸發順序
    2. DDL Trigger 和 LOGON Trigger 不能指定 TriggerSchema
    [ @order= ] 'value': Trigger 的觸發順序。
    1. value 為 varchar(10)
    2. 第一個和最後一個 Trigger 必須不同的 Trigger
    3. 可以是下列其中任何一個值

      說明
      First最先引發觸發程序。
      Last最後引發觸發程序。
      None觸發程序的引發,沒有任何既定順序。

    [ @stmttype= ] 'statement_type':指定觸發 Trigger 的 T-SQL 語法
    1. statement_type 為 varchar(50)
    2. 可以是 INSERT、UPDATE、DELETE、LOGON 或 DDL 事件中所列的任何 T-SQL,但不能指定事件群組
    @namespace = { 'DATABASE' | 'SERVER' | NULL }:
    1. DML Trigger:不需要指定或指定為 NULL
    2. DDL Trigger:指定使用資料庫範圍或伺服器範圍來建立
    3. LOGON Trigger:必須指定 SERVER

星期一, 7月 08, 2013

[VS] 自動換行

Code 太長的話,必須移動下方的軸來閱讀,對於閱讀時是一個麻煩
  • 右方的 1 看不見
[VS] 自動換行-1
  • VS => 工具 => 選項 => 文字編輯器 => C# => 勾選自動換行和顯式自動換行的視覺化圖像
[VS] 自動換行-2
  • 原本隱藏的 1 ,現在會出現在下一行且第一行後面會有圖示來表示
[VS] 自動換行-3

星期五, 7月 05, 2013

[SQL] PARSE() 和 TRY_PARSE()

PARSE 和 TRY_PARSE 為 SQL Server 2012 的新功能,僅適用於從字串轉換到日期/時間及數字類型,請注意,剖析字串值將對效能造成一定程度的負擔。
  • 語法:
    • PARSE ( string_value AS data_type [ USING culture ] )
    • TRY_PARSE ( string_value AS data_type [ USING culture ] )
  • 引數:
    • string_value: nvarchar (4000) 值,代表要剖析為指定之資料類型的格式化值。
    • data_type:
      • PARSE:表示結果之資料類型的常值。
      • TRY_PARSE:以文字表示結果所要求的資料類型。
    • culture:指出 string_value 據以格式化之文化特性的選用字串。如未提供 culture 引數,將會使用目前工作階段的語言。 此語言是以 SET LANGUAGE 陳述式隱含或明確加以設定。
  • 傳回類型:
    • PARSE:傳回轉譯成所要求之資料類型的運算式結果。
    • TRY_PARSE:將傳回運算式結果,並轉譯為所要求的資料類型;若轉換失敗,則傳回 Null。

簡易範例
-- 日期
SELECT PARSE('2013/2/6 下午 07:51:29' AS datetime using 'zh-tw') AS N'台灣日期'
SELECT TRY_PARSE('2013/2/6 下午 07:51:29' AS datetime using 'en-us') AS N'美國日期'
-- 貨幣
SELECT PARSE('NT$123,45' AS money USING 'zh-TW') N'台幣'
SELECT TRY_PARSE('NT$123,45' AS money USING 'en-us') N'美金'
故意引發錯誤
SELECT PARSE('2013/2/6 下午 07:51:29' AS datetime using 'en-us') AS N'美國日期'

星期四, 7月 04, 2013

[Challenge] 建立 SQL Server 版本的 Oracle INITCAP() 函數

Beyond Relational TSQL Challenge 22

This challenge deals with converting the phrases to proper case.In Oracle/PLSQL, the INITCAP function sets the first character in each word to uppercase and the rest to lowercase.For example, initcap('challenge'); would return 'Challenge'.The challenge to is implement similarly functionality in TSQL, that works similar to INITCAP function of ORACLE.
  • Sample Data
ID Data
-- -----------------------------
1  welcome to TSQL Challenge #22
  • Expected Results
ID Data                 Results
-- ----------------------------- ----------------------------- 
1  welcome to TSQL Challenge #22 Welcome To TSQL Challenge #22
  • Rules
  1. Results should be sorted in ascending order of ID.
  2. The program should run in SQL SERVER 2005 and above.
  3. The output should be in the same way as it has been shown.

星期一, 7月 01, 2013

[VS] 保留定位點

coding 時,常常會利用 tab 來進行縮排,但萬一縮排後,又要刪除縮排,VS 預設是一個 tab 產生 4 個空格,也就是你必須按 4 次 backspace 才可以回到原位置。
  • 從起始點至數字 1,是一個 tab,但從數字 1 回到起始點,要按 4 次 Backspace 才行。
保留定位點-1
  • VS => 工具 => 選項 => 文字編輯器 => C# => 定位點 => 選擇保留定位點
保留定位點-2

這樣使用 tab 從起始點跳到數字 1,只要按 1 次 Backspace 就可以回到起始點囉。