2012-01-29

Win7 取消工作列最近開啟程式檔案清單

在Win7中,在工作列程式會顯示最近開啟過的檔案列表,
若不想要此功能的話,可透過下列步驟關閉。
1.於工作列上滑鼠右鍵-->內容
2.切換至 [開始]功能表
3.將 儲存最近開啟的項目並顯示於[開始]功能表和工作列 取消

2012-01-28

MS SQL-字串函數-CHARINDEX

利用CHARINDEX函數,可抓取字串中指定字串的起始位置,
以方便程式進行字串的相關處理動作。
CHARINDEX('BCD','abcde')--不分大小寫
-----------
2
CHARINDEX('BCD','abcde' COLLATE Latin1_General_CS_AS)--分大小寫
-----------
0

參考自:MSDN-CHARINDEX

2012-01-20

MS SQL 字串函數-QUOTENAME-字串加上雙引號

利用MS SQL的QUOTENAME函數,
可以方便的將字串以引號包起來,
避免因為一堆引號降低程式碼可讀性,
及降低出錯機會。

select QUOTENAME('String','''')
--------------------------------------------------------- 
'String'

(1 個資料列受到影響)

參考自:QUOTENAME

2012-01-19

T-SQL 特殊字碼表

Enter ---char(13)
換行-----char(10)
Tab------char(9)
單引號--char(39)
雙引號--char(34)

2012-01-18

MS SQL 建立暫存表格 temp table

在MS SQL中建立暫存表方法有兩種,
1.在tempdb中建立
   I.區域-前置詞#-其他連線不可查詢此TABLE
   II.全域-前置詞##-其他連線可查詢此TABLE
   連線中斷後被清除
Create Table #NOM_tmp (
    GPNo varchar(3),                        
    DTNo Nvarchar(10),
    GPNa Nvarchar(10),
    DTNa Nvarchar(20))
2.在記憶體宣告建立
   批次作業結束後清除
DECLARE @NOM_tmp TABLE (
    GPNo varchar(3),                        
    DTNo Nvarchar(10),
    GPNa Nvarchar(10),
    DTNa Nvarchar(20))
參考自
MSDN-CREATE TABLE
建立#TempTable與Declare @TempTable有何差別

MS SQL Procedure 多個回傳值

上一篇 MS SQL 資料處理時多個回傳值
再延伸到編寫Stored Procedure時,遇到需要多個回傳值的處理方式!
--範例如下
CREATE PROCEDURE [dbo].[SP_TEST]
    (@xGPNo varchar(2),@xDTNo varchar(3),@xRGPNa Nvarchar(20) OUTPUT,@xRDTNa Nvarchar(50) OUTPUT)--設定傳入值格式
AS
BEGIN
    DECLARE @xSQL Nvarchar(MAX)--存放動態語法
    DECLARE @xGPNa Nvarchar(20)--接收回傳值
    DECLARE @xDTNa Nvarchar(50)--接收回傳值
    DECLARE @xStatemen nvarChar(MAX)--sp_executesql 參數

    --參數設定順序需與語法一致
    SET @xStatemen = '@xGPNa Nvarchar(20) OUT,@xDTNa Nvarchar(50) OUT,@xGPNo varchar(2),@xDTNo varchar(3)'
    --查詢語法
    SET @xSQL = 'select @xGPNa=GPNa,@xDTNa=DTNa '+
                ' from NOM '+
                ' where GPNo='+Quotename(@xGPNo,'''')+
                ' and DTNo='+Quotename(@xDTNo,'''')

    --語法、參數、回傳值及相關變數
    EXEC sp_executesql @xSQL,@xStatemen,@xGPNa OUT,@xDTNa OUT,@xGPNo,@xDTNo
    SET @xRGPNa=@xGPNa
    SET @xRDTNa=@xDTNa
END
--執行
DECLARE @xRGPNa Nvarchar(20)
DECLARE @xRDTNa Nvarchar(50)
EXEC dbo.SP_TEST 'SO','B01',@xRGPNa OUTPUT,@xRDTNa OUTPUT
select @xRGPNa+'-'+@xRDTNa
-----------------------------------------------------------------------
成品出入庫類別-銷貨出庫

(1 個資料列受到影響)
參考自:
MSDN-CREATE PROCEDURE
walter 心得筆記-[SQL Server] 如何接收 Store Procedure 的傳回值

MS SQL 資料處理時多個回傳值

在撰寫Stored Procedure時,若需要在一個查詢將多個資料欄位值存入各別的變數中,
可透過 sp_executesql 來達到需求
--範例
DECLARE @xGPNo varchar(2)--查詢變數
DECLARE @xDTNo varchar(3)--查詢變數
DECLARE @xSQL Nvarchar(MAX)--存放動態語法
DECLARE @xGPNa Nvarchar(20)--接收回傳值
DECLARE @xDTNa Nvarchar(50)--接收回傳值

DECLARE @xStatemen nvarChar(MAX)--sp_executesql 參數

SET @xGPNo = 'SO'--指定值
SET @xDTNo = 'B01'--指定值

--參數設定順序需與語法一致
SET @xStatemen = '@xGPNa Nvarchar(20) OUT,@xDTNa Nvarchar(50) OUT,@xGPNo varchar(2),@xDTNo varchar(3)'

--查詢語法
SET @xSQL = 'select @xGPNa=GPNa,@xDTNa=DTNa '+
            ' from NOM '+
            ' where GPNo='+Quotename(@xGPNo,'''')+
            ' and DTNo='+Quotename(@xDTNo,'''')

--語法、參數、回傳值及相關變數
EXEC sp_executesql @xSQL,@xStatemen,@xGPNa OUT,@xDTNa OUT,@xGPNo,@xDTNo

--結果   
select @xGPNa+'-'+@xDTNa
-----------------------------------------------------------------------
成品出入庫類別-銷貨出庫

(1 個資料列受到影響)
參考自:TechNet-sp_executesqlMSDN-使用 sp_executesql

2012-01-17

MS SQL CURSOR 使用

當遇到在SQL中需逐筆處理抓取資料時,
可使用CURSOR來處理。
--範例如下
DECLARE Cursor_tmp CURSOR FOR --建立Cursor
        (select MixRubNo,MachNo,Ver,TMNo
        from #RubSpec_Tmp
        where GSeq='1')

OPEN Cursor_tmp--開啟Cursor
FETCH NEXT FROM Cursor_tmp INTO @xMixRubNo,@xMachNo,@xVer,@xTMNo--將值放入變數
WHILE @@FETCH_STATUS = 0--有回傳值
BEGIN
    UPDATE RubSpec SET isCal='1' where MixRubNo=@xMixRubNo
                    and MachNo=@xMachNo
                    and Ver=@xVer
                    and TmNo=@xTMNo

    FETCH NEXT FROM Cursor_tmp INTO @xMixRubNo,@xMachNo,@xVer,@xTMNo--將值放入變數
END       
CLOSE Cursor_tmp--關閉Cursor
DEALLOCATE Cursor_tmp--釋放Cursor
參考自:
MSDN-CURSOR
MSDN-@@FETCH_STATUS
MSDN-DEALLOCATE
日月-[SQL] Cursor 使用方法
好風工作室-[T-SQL]在巢狀迴圈抓@@fetch_status會回傳-1的解決方法

MS SQL 判斷資料表是否存在

--方法一-透過INFORMATION_SCHEMA.TABLES
select *
from INFORMATION_SCHEMA.TABLES
where TABLE_TYPE='BASE TABLE'
and TABLE_NAME='RubSpec'

--方法二-透過sys.tables
select *
from sys.tables
where name='RubSpec'

--方法三-使用OBJECT_ID
select OBJECT_ID('RubSpec')
----若為暫存表格,因存放於tempdb,語法改寫為
select OBJECT_ID('tempdb..RubSpec')

--如果表格存在要一併刪除,可使用下述語法
IF (select OBJECT_ID('RubSpec')) IS NOT NULL Drop Table RubSpec