2012年7月25日 星期三

T-SQL 學習紀錄(1)

下sql command的時候,有時候多麼希望條件可以動態產生
如果使用程式的方式是非常容易的
但是在T-SQL有限的能力下,是非常複雜的!!

但是為了要使用pivot這個好用的功能
不得不要寫一個stored procedure來達成

SELECT * FROM dbo.table WHERE column IN (xxxxxx)
重點就在於xxxx要如何動態產生

stackoverflow真是好網站,什麼奇怪的問題都有人問
還引發一連串的討論

以下是我使用的方法
首先先寫一個function存起來



CREATE FUNCTION [dbo].[fnSplit](
    @sInputList VARCHAR(8000) -- List of delimited items
  , @sDelimiter VARCHAR(8000) = ',' -- delimiter that separates items
) RETURNS @List TABLE (item VARCHAR(8000))
BEGIN
DECLARE @sItem VARCHAR(8000)
WHILE CHARINDEX(@sDelimiter,@sInputList,0) <> 0
 BEGIN
 SELECT
  @sItem=RTRIM(LTRIM(SUBSTRING(@sInputList,1,CHARINDEX(@sDelimiter,@sInputList,0)-1))),
  @sInputList=RTRIM(LTRIM(SUBSTRING(@sInputList,CHARINDEX(@sDelimiter,@sInputList,0)+LEN(@sDelimiter),LEN(@sInputList))))

 IF LEN(@sItem) > 0
  INSERT INTO @List SELECT @sItem
 END
IF LEN(@sInputList) > 0
 INSERT INTO @List SELECT @sInputList -- Put the last item in
RETURN
END


透過這個function就可以將一連串的字串拆開啦!!
使用方式

SELECT item from fnSplit(@tags, ‘|’)

如果套用在code當中,就會如同下面的頁面


DECLARE @tags
SET @tags = ruby|rails|scruffy|rubyonrails
select * from Tags where Name in (SELECT item from fnSplit(@tags, ‘|’))
order by Count desc



ref:
http://stackoverflow.com/questions/337704/parameterizing-an-sql-in-clause

2012年7月10日 星期二

DotNet 學習紀錄(2)

One-way web service

通常的情況來說,呼叫web service之後,都會有回傳值
但還是會有只送出request給server,但不需要等候回覆的時候

因此就有了one-way web service
除了在定義operation contract的時候要寫成void
還要標示成one way
這樣以soap表示的時候,會更為明確

定義 IService的時候,將IsOneWay設定為true

[OperationContract(IsOneWay=true)]
void Add(double n1, double n2);


ref:
http://msdn.microsoft.com/en-us/library/ms730149(v=vs.90).aspx

2012年7月6日 星期五

DotNet 學習紀錄(1)

最近在寫 .NET 4.0的web service
web service也就是說是在網路上的服務嘛....
總是要定義一個網址,才make sense吧

但是在binding web address的時候,總是會寫 http://localhost/xxxx/xxx.svc
一旦被解析出來的時候,往往就會變成是電腦名稱
我的電腦名稱又沒有DNS認得他,豈不是就找不到了!?
如果直接指定ip address,要佈署到另一台電腦上還要重新改config也很麻煩

於是就找到下面的方法了


在 web.config中

<system.serviceModel>
    <behaviors>
        <serviceBehaviors>
            <behavior>
                <useRequestHeadersForMetadataAddress/>  ← 加入這行
            </behavior>
        </serviceBehaviors>
    </behaviors>
</system.serviceModel>

就搞定囉!!!!




網頁留存(reference)
using request headers for metadata address
http://zamd.net/2010/01/14/using-request-headers-for-metadata-address/