2013-09-10 64 views
0

我得到一個表檢查約束的定義是這樣的:保存檢查約束變量賦值

select a.CHECK_CLAUSE 
from INFORMATION_SCHEMA.CHECK_CONSTRAINTS a,INFORMATION_SCHEMA.TABLE_CONSTRAINTS b 
where b.TABLE_NAME = 'table name' 

在我的例子,假設運行該查詢返回的:

[([depname]='mathematics' OR [depname]='electronics' OR [depname]='computer science')] 

如何分配在檢查約束中指定的值變量?即計算機科學,數學和電子學?

+0

你必須預先聲明變量,所以你知道里面是否有3個,15個或者237個OR子句? –

+0

OR子句的數量不清楚,取決於使用的表和列。 –

+0

對,你如何申報你的變量?你打算怎麼處理它們?也許你想把值放入一個表變量或#temp表中,而不是單個變量... –

回答

1

它看起來像你得到一個字符串返回。你可以做的是將字符串拆分爲OR的實例,並將其存儲在一個數組中,然後遍歷數組並分割每個元素以分離這些值。所以,如果你是這樣做在PHP中,代碼可能看起來是這樣的:對於

// For reasons of simplicity we will assume the result is stored in $result, 
// and the leading [(and trailing)] have already been removed 
$values = array(); 
$resultsplit = explode(' OR ', $result); 

/* $resultsplit is now an array: 
* $resultsplit[0] = "[depname]='mathematics'" 
* $resultsplit[1] = "[depname]='electronics'" 
* $resultsplit[2] = "[depname]='computer science'" 
*/ 

if ($result != '') { 
    foreach ($resultsplit as $rs) { 
     $rsparts = explode('=', $rs); 

     /* $rsparts is now an array. On the first element: 
     * $rsparts[0] = "[depname]" 
     * $rsparts[1] = "'mathematics'" 
     * So all we need to do is stick $rsparts[1] into $values 
     */ 

     $values[] = $rsparts[1]; 
    } 
} 

這將會把所有的值到數組$values(包括在開始和結束的單引號)你隨心所欲,不管有多少。如果PHP不是您可以使用的語言,那麼同樣的方法仍然可以用您的語言選擇。

+0

SQL Server沒有數組(或內置的分割機制),所以「你選擇的語言」實際上比你聲音的限制更多。 :-) –

+0

@AaronBertrand我假設,因爲他想把它們變成變量,他可以使用另一種語言來解析結果。如果結果不是這樣,我可能會刪除這個答案作爲不相關的。 – DiMono