2009年11月11日 星期三

我的查詢不怕大小寫喲~~

對自己而言,是個「大發現」~~不知道別人是否已經知道這個小技巧了~~

往往我們在SQL 下查詢語法時,
為了避免要找「3Probe」時,鍵入「3probe」會找不到資料,
於是乎,我們會針對關鍵字做二件事
txt.Text.ToLower()」,針對我們鍵入的值轉成「小寫」(當然也可以是大寫);
lower(company) like '%@keyword%'」,針對資料庫欄位資料也轉成小寫;
這樣去比對的話,「小寫對小寫」就沒問題可以找出來了~~

如今,我的大發現就是在查詢語法的欄位處,去更改它的「定序」再去比對資料,
將「定序」設成「Chinese_Taiwan_Stroke_CI_AS(忽略大小寫)」的值,
可以不管三七二十一的給它去找,
而且,這種方法,也支援我們一向害怕的「ntext」資料型態的欄位。
(因為之前用轉小寫的的方法在ntext這邊沒辦法用)

至於效能的話呢,在這邊也提供了圖片大家參考,在SQL裡面測一下試試,
多了一個轉換定序的動作,會不會耗效能呢?
圖片所示,所佔比例都是「33%」,看起來,似乎不會太佔效能
也許資料量不多測試的不完整~~請多包涵。






2009年7月29日 星期三

三位一撇…好簡單

之前,想要在報表將金額的部份,需有「1,234」這樣的格式,
於是很直覺的想說在SQL撈資料時,就將其轉成「1,234」就好,
就上網去找看看有沒有什麼語法,在網路上,也看到有人自訂了函式來產生,
但,覺得有點麻煩,主要是覺得,這種東西應該很大眾化,大家都會有需求才對,
微軟應該會貼心一點才是,於是便往SQL的預設函式去尋找,後來找到了~~嘻嘻
是利用大家常用的「Convert」函式喲~~

MSDN:


實際的語法:
SELECT REPLACE(CONVERT(VARCHAR,CONVERT(MONEY,12345678.123),1),'.00','')

當然,若是想在報表要輸出,而不是透過SQL轉好再輸出,
則可以利用報表的「Format」函式來做。

格式語法:
Format(CLng(First( 欄位值 , "ds")),"###,###,###,##0")
(在前面有個CLng就是將其轉成數字格式,若是有小數點的話,則應該使用CDbl)

(以上測試,感謝 三趨科技 官大龍 協助)

2009年7月17日 星期五

預存程式的資料也可 Join 資料表

各位有沒有試過,將StoreProcedure裡的資料,再去join別的資料表呢?
之前遇到一個問題,就是原本的清單必須要還要再過濾一些條件,

但清單的資料已經是從StoreProcedure裡撈出來的,

StoreProcedure是共用的呀,我總不能為了自己的這個地方,

而去改共用的StoreProcedure,那這樣的話,不就會影響到其它的程式了,

那另外自己再寫一個查詢 SQL 咧?

偏偏那個 SQL 又是一長串,懶得自己再寫了。

於是就覺得,應該可以把StoreProcedure撈出來的資料,再去join別的資料表吧。

於是,又去拜訪了Google大神~~


嘿嘿嘿!!一下子就找到資料了,果然真的有嘛~~
--將查詢結果存入暫存資料表
create table #temp(mid nvarchar(10),memberchname nvarchar(10),uid nvarchar(32),unitname varchar(100))

insert into #temp EXEC spMemberList @uid

--只挑出8及5的值
select #temp.* ,B02POPESN,B02ADKIND from #temp
inner join p2kdb.dbo.CPABT02M on mid=B02IDNO
where (B02POPESN='8' or B02ADKIND='5')

drop table #temp

2009年4月17日 星期五

在WebPart中讓加入的UserControl動態產生動作按鈕

現在大部份的網站都支援客製化的設定
也就是說,可以讓使用者自行定義自己的畫面,想要看到的東西
就像「iGoogle」那樣~~

微軟在.net 2.0提供了「WebPart」的元件,供大家使用~~
至於WebPart的使用方式,其實,拉一拉就出來了~~並不難
這邊就不多加介紹說明了

在此,提供一個比較進階的使用方法。如題,
可以自行在WebPart的標題列按鈕區,動態增加自己要的按鈕
並執行指定的程式碼。

WebUserControl.ascx.cs 程式碼
-----------------------------------------------------------
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class WebUserControl : System.Web.UI.UserControl, IWebActionable
{
    protected void Page_Load(object sender, EventArgs e)
    {
        this.Button1.Visible = false;
    }
    WebPartVerbCollection IWebActionable.Verbs
    {
        get
        {
            WebPartVerb editVerb = new WebPartVerb(
            "editVerb1",
            new WebPartEventHandler(this.Button1_Click)
            );
            editVerb.Text = "我是動態產生的";

            
            return new WebPartVerbCollection(
            new WebPartVerb[] { editVerb }
            );
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        //要執行的指令
    }
}

----------------------------------------------------------------