2015-05-20 76 views
0

我的SQL技能是有限的:發現長度 - 選擇子查詢

我有一個數據庫(SQLBase在這種情況下)已經在列的夫婦LONGVARs的。 我正在搜索具有特定類型的所有COLUMNS的實際長度。

SELECT tbname,name FROM sysadm.syscolumns where coltype='LONGVAR'; 

上述聲明的作品。它爲我提供了所有具有LONGVAR數據類型的表和相應的列名。現在,我想獲取這些數據並搜索所有相應的表(行,數據)並查找相應LONGVAR列的長度(例如,查找最大值或超過某個限制的值)。

我有這樣的想法,它可以用嵌套SELECT語句的子查詢解決,但不知道如何制定語句。

回答

1

我沒有SQLbase任何真正的知識,所以我可能會關閉基地在這裏:但是如果我試圖做此SQL Server上,一個簡單的辦法是做類似如下:

SELECT 
    tbname, 
    name, 
    'SELECT ''' + tbname + ''' AS TableName, ''' + name + ''' AS ColumnName, MAX(LEN(' + name + ')) AS ColumnLength FROM ' + tbname + ' -- add a WHERE clause here if needed' AS Query 
FROM sysadm.syscolumns 
WHERE coltype='LONGVAR'; 

這將輸出一組值,然後您可以將其複製/粘貼到新的查詢編輯器窗口並在運行前檢查。

其他更復雜的解決方案將涉及動態SQL,它會自動執行每個語句;但是,再次,不太瞭解SQLbase,這是我開始的地方。

+0

謝謝。我將它粘貼到控制檯中以運行SQL。當然,我不應該指望這個運行沒有拋出錯誤。但要理解長引用的'SELECT ....'這一行,你能詳細說明一下嗎?我得到:'SELECT tbname, name, 'SELECT'''+ tbname +'''AS TableName,'''+ name +'''AS ColumnName,MAX(LEN('+ name +') )AS ColumnLength FROM'+ tbname +' - 如果需要,在這裏添加一個WHERE子句'AS查詢 ^ 錯誤:00318 EXE DNN數據不是數字' – Krischu

+0

一位同事很善意地修改語句以適應SQLBase語法: SELECT tbname ||';'|| name ||';'|| 'SELECT'''|| tbname || '''AS TableName,'''||名稱|| '''AS ColumnName,MAX(@LENgth('|| name ||'))AS ColumnLength FROM'|| tbname ||'; 'AS查詢 FROM sysadm.syscolumns WHERE coltype ='LONGVAR' ORDER BY TBNAME; ' – Krischu

+0

最後一個問題:由於上面的查詢生成了一個查詢列表,是否有可能將它打包成一個過程並執行這個「數組」或查詢表?在SQL中可以執行存儲在錶行/列中的SQL代碼嗎?類似於unix shell(反引號)。我很確定它是。 – Krischu