2009年12月16日 星期三

T-SQL 語言基礎與資料類型

Standard
T-SQL語言所包含的語法元素

註解

  • -- 雙連字號:從雙連字號開始到該行結尾之間,全部都是註解的一部分。
  • /*...*/ 斜線-星號字元配對:從開始註解配對/*到結束註解配對*/之間,全部都是為註解的一部分。

GO:代表批次的結尾。

識別碼

資料庫物件名稱又稱為 識別碼(identifiers)。SQL Server中每個物件都具有識別碼,例如,伺服器、資料庫與資料庫物件(資料表、資料行、索引、條件約束、規則、觸發程序、檢視、預存程序,函數...等)都有識別碼。

  • 一般識別碼:@本機變數或參數,@@部分T-SQL功能名稱,#暫存資料表或預存程序,##全域暫存物件,且識別碼不可以是大小寫的T-SQL保留字,不允許內嵌空格或特殊字元。
  • 分隔識別碼:在T-SQL陳述式中使用識別碼時,如果識別碼與上述規則不符,則必須使用雙引號("")或方括號([])加以分隔。
    MSSQL2008預設 QUOTED_IDENTIFIER選項為ON,表示雙引號只能用來括識別碼,單引號則是用來括字串,且當字串當中有(')單引號時,需以兩個單引號('')表示。
    SELECT * FROM "My Product Table"
    WHERE "Product Name" = 'A''Box'

    若QUOTED_IDENTIFIER為OFF,則雙引號不能用來分隔識別碼,需使用方括號([]),但可以使用單引號或雙引號來括住字元字串,如果使用雙引號,則不必再使用兩個單引號來表示嵌的單引號。
    SET QUOTED_IDENTIFIER OFF
    SELECT * FROM [My Table]
    WHERE [Last Name] = "O'Brien"

運算子

算術運算子:+-*/ 比較運算子:= > < >= <= <>
邏輯運算子:大多用於WHERE子句,AND OR NOT BETWEEN EXISTS IN LIKE
指派運算子:= 字串串連運算子:+ 位元運算子:&(位元AND) (位元OR) ^(位元XOR)
一元運算子:+(正) -(負) ~(位元NOT)

資料類型

mssql2008新增資料類型:
date、Time、Datetimeoffset、varchar(Max)、Nvarchar(Max)

字串數字 --> 數字
字串日期 --> 日期 (自動轉型,反之則需用convert函數做轉換)
select convert (varchar,1)+'A'
declare @a datetime = '2009-10-20 08:10:50 PM'
select convert(varchar,@a,103)

貨幣資料:小數點第四位後,四捨五入。

Round函數
ROUND (數值運算式, 長度, 功能)
長度為正數指小數點右邊,為負數指小數點左邊;
功能預設是0,表示要四捨五入,若為非0則無條件捨去。
select ROUND(15.4562, 2) ans: 15.4600
select ROUND(15.4562,1) ans: 15.5000
select ROUND(1482.25,-2) ans: 1500.00
select ROUND(45.45, 1,1) ans: 45.40

2009年12月15日 星期二

MSSQL 2008 - 認識sqlcmd

Standard
透過sqlcmd command line指令,可以達到程式化部署系統、某些例行性批次作業需要在每天下班後進行(如資料轉檔),常見做法是先將T-SQL陳述式儲存為*.sql檔案,然後以作業系統的排程功能自動執行。換句話說,利用【sqlcmd公用程式】與SQL Server資料引擎溝通,可以讓使用者互動地執行T-SQL陳述式,或是指定T-SQL指令碼檔案,週期性在背景批次執行,一些日常營運維護的工作,將會需要此種方式完成。

各版本所提供的命令提式公用程式
sqlcmd.exe OLE-DB MSSQL2005、2008
osql.exe ODBC MSSQL 7、2000
isql.exe DL-Library MSSQL6.5

MSSQL2005、2008新增功能
  • 指令變數:在sqlcmd中利用 -v 選項或是setvar命令,使用自訂變數,動態存取系統的環
    境變數、伺服器端的資訊與回傳相關錯誤訊系等。
  • 管理者專用連線(Dedicated Administrator Connection;DAC):在sqlcmd利用 -A選項,允
    許資料庫管理者藉此專屬的通道,連線到伺服器上進行系統修復作業。

指令簡介

sqlcmd /? 顯示sqlcmd公用程式所支援的參數

sqlcmd -S Server_Name -U 登入帳號 -P 密碼 登入特定MSSQL Server指令

!!指令名稱 執行Windows作業系統命令 (ex: !!dir)

sqlcmd -i C:\script01.sql -o C:\Report01.txt 將script01.sql執行結果令存到Report01.txt檔

Exercise:使用變數進行T-SQL script的執行
script02.sql
USE $(db1)
GO
select $(c1)
FROM $(t1)
GO

從client端PC連入MSSQL Server執行script
sqlcmd -S TESTServer -U sa -P 123456 -i c:\script02.sql -o c:\report02.txt -v db1="Northwind" c1="name" t1="sys.tables"


網路資源
sqlcmd 公用程式(mssql2005線上叢書)
sqlcmd 公用程式(mssql2008線上叢書)

2009年3月23日 星期一

2009年3月7日 星期六