2012-03-02 17 views
0

我有以下查詢子字符串文本類型的列自動應用查詢

select * from table1 

如果table1中包含文本類型的列/列的話,我只需要100個字符

假設,最終用戶不知道表格的模式(列名稱),只需知道表名 從作爲前端應用程序的查詢分析器執行此查詢。在textarea的 用戶作家查詢和執行

*我在查詢中使用SQLServer2005的
不使用字符串函數從前端處
我可以使用C#代碼中的文本列的子功能,但我想這個數據庫中結束。 *

+0

您可以創建子字符串表的視圖,然後讓用戶只能訪問視圖。 – 2012-03-02 07:31:41

+0

我不想創建視圖。數據庫中有超過一百個表。 – Ali 2012-03-02 07:35:17

回答

1

如果我理解正確,您希望用戶指定一個表名,並獲取SELECT * FROM的所有文本字段限制爲100個字符的結果以及所有數據庫端的結果?

對我來說,你需要創建一個存儲過程來做到這一點。您的輸入參數將是表名,然後您將繼續查詢表的結構,並構建一個動態SELECT語句,該語句在大於100個字符的文本字段上使用SQL子字符串。在存儲過程中運行動態SQL語句,這將是您的結果。

要獲取表結構,只需運行存儲過程sp_help並將表名稱作爲參數。結果將包含列名和類型。循環它以構建動態SQL語句。

0

我會建議在應用程序邏輯而不是SQL中執行此操作,尤其是因爲您似乎在討論多個表。

使用的SqlDataReader,通過成果循環,減少琴絃,你需要他們:

while(reader.Read()) 
{ 
    var rawValues = reader.GetValues(); 
    var values = new object[rawValues.Length]; 

    for (i=0; i < rawValues.Length; i++) 
    { 
    var value = rawValues[i]; 
    if(value != null && value is string && value.Length > 100] 
     values[i] = value.SubString(0, 100); 
    } 

    //now do whatever you want with the values 
} 

爲了避免不斷反思(is string),你也可以使用閱讀器的模式信息,以找出哪些是字符串列。

+0

我的數據庫和網絡服務器位於不同的地區。 – Ali 2012-03-02 07:42:10

+0

這意味着你想節省帶寬或者它只是減慢速度? – ntziolis 2012-03-02 07:45:49