2011-06-30 13 views
1

給定一個列出我所有表和列的select語句,如何將表和列名轉換爲可在單獨的select語句中使用的標識符?將文本轉換爲數據庫對象和字段標識符

換句話說,如果我有字符串@表=「人」和@Column =「名稱」,我想是這樣的:

select 
    DATALENGTH(MAX([email protected])) as Longest, 
    DATALENGTH(MIN([email protected])) as Shortest 
from @Table as t; 

當然,這不完成我想要的。我想知道存儲在列中的最長和最短字符串的長度。如果我想爲單個列提供這些信息,則不需要使用這些字符串化變量。但我想爲我的數據庫中的每個(varchar)列執行此操作。生命太短,無法創建每條SQL語句來完成此任務。這就是爲什麼我需要用於指定表格和列的參數化機制。我如何解決這個問題以達到目標?

當然,我可以解決這個問題。也許我應該通過索引來解決每一列,並且只在需要輸出時才轉換爲列名。思考?

+0

只有實現這一目標的方法是使用動態SQL –

回答

1
DECLARE @sql VARCHAR(999) 
DECLARE @col VARCHAR(50) 
DECLARE @table VARCHAR(50) 

SET @col = <colname> 
SET @table = <tablename> 

SET @SQL = ' 
select 
DATALENGTH(MAX([email protected])) as Longest, 
DATALENGTH(MIN([email protected])) as Shortest 
from @Table as t' 

SET @SQL = REPLACE(REPLACE(@SQL, '@Column', @col), '@Table', @table) 

EXEC(@SQL) 
+0

這是非常重要的補充某種披露或警告這樣的事情的時候你給新用戶動態SQL ...這可能會導致各種他們不準備處理的問題。 – JNK

+0

對不起,我是這個論壇的新手而不是用來解釋我的sql。但我同意動態sql +新用戶有風險。然而,在這裏用戶已經知道基本的語法,所以這只是在記事本中添加一些額外的行的情況。 –

1

如果你是tsql和動態sql的新手,這是一個很好的閱讀你應該考慮的事情。大多數人,當他們發現動態SQL時,會想到各種各樣的用途以及他們可以用它做的事情。但就像我說的那樣......要小心。

http://www.sommarskog.se/dynamic_sql.html