2014年12月24日 星期三

使用T-SQL 匯出 DB Schema (表格名稱.欄位名稱.資料型別.長度.預設值.是否允許空值.欄位描述)


又到了年終驗收的季節,相信許多工程師現在又深陷在寫文件泥沼了....Orz

因為產文件最麻煩就是要產DB Schema,如果要一個DB 一個表 一個欄位自己key,那就真的太辛苦了!

以下的語法,可以幫助大家輕鬆的產出DB Schema,只要稍加整理,就可以完成報告拉~~~~(灑花)

-------------------------------------------這是指令碼------------------------------------------------------
USE Demo;
SELECT a.Table_schema +'.'+a.Table_name   as 表格名稱   
       ,b.COLUMN_NAME                     as 欄位名稱   
       ,b.DATA_TYPE                       as 資料型別   
       ,isnull(b.CHARACTER_MAXIMUM_LENGTH,'') as 長度   
       ,isnull(b.COLUMN_DEFAULT,'')           as 預設值   
       ,b.IS_NULLABLE                         as 是否允許空值   
       ,( SELECT value   
          FROM fn_listextendedproperty (NULL, 'schema', a.Table_schema, 'table', a.TABLE_NAME, 'column', default)   
          WHERE name='MS_Description' and objtype='COLUMN'    
          and objname Collate Chinese_Taiwan_Stroke_CI_AS = b.COLUMN_NAME   
        ) as 欄位描述   
FROM INFORMATION_SCHEMA.TABLES  a   
LEFT JOIN INFORMATION_SCHEMA.COLUMNS b ON a.TABLE_NAME = b.TABLE_NAME   
WHERE TABLE_TYPE='BASE TABLE'
ORDER BY a.TABLE_NAME , b.ORDINAL_POSITION 
-------------------------------------------這是指令碼------------------------------------------------------

簡單介紹一下上面的語法

INFORMATION_SCHEMA.TABLES //查詢該資料庫裡所有資料表資訊

INFORMATION_SCHEMA.COLUMNS  //查詢該資料表裡所有資料欄位資訊

fn_listextendedproperty //列出資料表欄位的資訊(為了取得 欄位描述 而使用)

※Chinese_Taiwan_Stroke_CI_AS  //這是指定資料庫的編碼(此為 台灣繁體中文且不分大小寫)


-------------------------------------------以下是執行介面------------------------------------------------

T-SQL 指令


執行結果

2013年3月27日 星期三

SQL Where條件 IN (組合字串 @Parameter)

最近在開發新的專案 ,為了要一次刪除多筆User所選取的資料 ,
故我在網頁的前端設計GridView讓User選取資料 ,
後端則再判斷User所選取的PK,組合起來傳進Stored Procedures 。

EX:

刪除 PK_ID(int) 員工編號(varchar) 員工姓名(nvarchar)
V 1 0001 Mike
3 0004 Alvis
V 19 0023 Mary

如上圖所示,User選取的 PK_ID = 1 及 PK_ID = 19 這兩筆資料要進行刪除

於是我用了String將PK組合起來

string strID = string.Format("{0},{1}",1,19);  //結果 strID 應該是 1,19

而在SQL 部分
@Parameter = strID;

DELETE FROM tb_Employee
WHERE PK_ID IN (@Parameter);

/*
理論上,以上的SQL指令應該是可以執行的才對啊!
殊不知,執行後卻出現
varchar無法轉換為int 的Error出現
*/

因為我們為了貪圖方便,所以@Parameter是以組字串的方式,故會將@Parameter為varchar或nvarchar,而當用這種方式在SQL執行時,系統會自動辨識為"字串",為了要解決這個問題,所以我們應該要把指令改為下列方式。

EXEC('DELETE FROM tb_Employee
WHERE PK_ID IN ('+@Parameter+')')

這樣系統才會正確的執行,提供給大家囉~

2012年10月10日 星期三

專案太多,DB IP傻傻分不清楚?!

  在這間公司也一段時間了,慢慢的身上也背起了一些案子,但每個案子的Server都不同,當然IP也就不同,每當不小心有需要維護的時候,就要開始回想該專案的Server IP是多少,帳密又是多少,這真的很惱人,除了用Excel記錄那些惱人的IP、帳密之外,還有沒有更方便的方法呢?答案是肯定的!

  當我們打開SQL Server的時候,會看到以下熟悉的畫面(圖1),這時候要回憶IP及帳密,真是苦了記性不好的工程師...此時,有個辦法可以解決工程師的困擾!!!
圖1
首先,點選 [ 檢視 ] > [ 已註冊的伺服器 ] (圖2)

圖2
這時會看到左方工具列多了一個「已註冊的伺服器」頁籤(圖3,1之處),在上方列表「本機伺服器群組」按右鍵,選擇選單「新增伺服器註冊」(圖3,2之處)

圖3
點選後,會出現「新增伺服器註冊」對話框,把相對應的資訊填一填(圖4),填完可以先 [ 測試 ][ 測試 ] 完再 [ 儲存 ]

圖4
儲存之後,在「本機伺服器群組」中即會看見剛剛註冊好的伺服器DB(圖5)

圖5
點選剛註冊好的伺服器DB右鍵(※此時需要連線時間,會稍微不能動,那是正常現象) > [ 物件總管 ]  (圖6)

圖6
 當成功連線後,會跳轉到 [ 物件總管 ] 頁籤,看到以下熟悉畫面(圖7),就OK啦!
圖7

好了!打完收工!(收書包)

2012年10月9日 星期二

如何檢查Port有無開通

因為Server環境要轉移,還要檢查兩台Server之間的 xxx Port有無互通,用 Ping 的又無法得知Port是否開啟,於是乎....Netstat 這個指令就很好用啦!!

第一次使用 Netstat 可以先輸入 Netstat -? 來查看這個指令有什麼不同的功用。


於是乎...我不帶任何參數


我們便可以看到使用的是什麼通訊協定TCP OR UDP ,IP位址(127.0.0.1為本機),IP位址後街的為Port,於是乎我們可以從此表看出我的電腦開啟了那些Port,且狀態為ESTABLISHED,若是只做傾聽的Port,則狀態會顯示LISTEN。



2012年10月4日 星期四

String.Format 格式速查表

昨天在逛 Will保哥 網站的時候,無意間看到這篇文章

手邊有一張速查表(Cheat Sheets)是件很方便的事

於是我去找了  String.Format For .Net 的速查表,整理了一下

Strings
Sample
Generates
String.Format(“->{1,10}<-”, “Hello”);
-> Hello<-
String.Format(“->{1,-10}<-”, “Hello”);
->Hello <-
Numbers
Specifier
Type
Format
Output (Passed Double 1.42)
Output (Passed Int -12400)
c
Currency
{0:c}
$1.42
-$12,400
d
Decimal (Whole number)
{0:d}
System.FormatException
-12400
e
Scientific
{0:e}
1.420000e+000
-1.240000e+004
f
Fixed point
{0:f}
1.42
-12400.00
g
General
{0:g}
1.42
-12400
n
Number with commas for thousands
{0:n}
1.42
-12,400
r
Round trippable
{0:r}
1.42
System.FormatException
x
Hexadecimal
{0:x4}
System.FormatException
cf90
Custom number formatting:
Specifier
Type
Example
Output (Passed Double 1500.42)
Note
0
Zero placeholder
{0:00.0000}
1500.4200
Pads with zeroes.
#
Digit placeholder
{0:(#).##}
(1500).42
.
Decimal point
{0:0.0}
1500.4
,
Thousand separator
{0:0,0}
1,500
Must be between two zeroes.
,.
Number scaling
{0:0,.}
2
Comma adjacent to Period scales by 1000.
%
Percent
{0:0%}
150042%
Multiplies by 100, adds % sign.
e
Exponent placeholder
{0:00e+0}
15e+2
Many exponent formats available.
;
Group separator
see below

Enumerations
Specifier
Type
g
Default (Flag names if available, otherwise decimal)
f
Flags always
d
Integer always
x
Eight digit hex.



Some Useful Examples
String.Format(“{0:$#,##0.00;($#,##0.00);Zero}”, value);
Input: 1243.50  Output:$1,240.00
Input: -1243.50  Output:Zero
String.Format(“{0:(###) ###-####}”, 8005551212);
This will output “(800) 555-1212″.


Dates
Specifier
Type
Example (Passed System.DateTime.Now)
d
Short date
10/12/2002
D
Long date
December 10, 2002
t
Short time
10:11 PM
T
Long time
10:11:29 PM
f
Full date & time
December 10, 2002 10:11 PM
F
Full date & time (long)
December 10, 2002 10:11:29 PM
g
Default date & time
10/12/2002 10:11 PM
G
Default date & time (long)
10/12/2002 10:11:29 PM
M
Month day pattern
December 10
r
RFC1123 date string
Tue, 10 Dec 2002 22:11:29 GMT
s
Sortable date string
2002-12-10T22:11:29
u
Universal sortable, local time
2002-12-10 22:13:50Z
U
Universal sortable, GMT
December 11, 2002 3:13:50 AM
Y
Year month pattern
December, 2002
Custom date formatting:
Specifier
Type
Example
Example Output
dd
Day
{0:dd}
10
ddd
Day name
{0:ddd}
Tue
dddd
Full day name
{0:dddd}
Tuesday
f, ff, …
Second fractions
{0:fff}
932
gg, …
Era
{0:gg}
A.D.
hh
2 digit hour
{0:hh}
10
HH
2 digit hour, 24hr format
{0:HH}
22
mm
Minute 00-59
{0:mm}
38
MM
Month 01-12
{0:MM}
12
MMM
Month abbreviation
{0:MMM}
Dec
MMMM
Full month name
{0:MMMM}
December
ss
Seconds 00-59
{0:ss}
46
tt
AM or PM
{0:tt}
PM
yy
Year, 2 digits
{0:yy}
02
yyyy
Year
{0:yyyy}
2002
zz
Timezone offset, 2 digits
{0:zz}
-05
zzz
Full timezone offset
{0:zzz}
-05:00
:
Separator
{0:hh:mm:ss}
10:43:20
/
Separator
{0:dd/MM/yyyy}
10/12/2002


這樣清楚多了,以後查詢起來也快了一些,大大提升工作效率。