2011-06-30 4 views
1

すべてのテーブルとカラムをリストするselect文があると、テーブルとカラム名を別のselect文で使用できる識別子に変換するにはどうすればよいですか?私が欲しいものを達成していません。もちろん、テキストをdbオブジェクトとフィールド識別子に変換する

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

:私は、文字列@Table =「人」と@Column =「name」を持っている場合つまり

は、私はこのような何かをしたいです。私は列に格納されている最長と最短の文字列の長さを知りたい。この情報が単一の列に対して必要だった場合、これらの文字列化された変数を使用する必要はありません。しかし、私はこれをデータベースの向こうのすべての(varchar)列に対して実行したい。人生はこれを達成するためにすべてのSQL文を作成するには短すぎます。このため、テーブルと列を指定するためのパラメトリックなメカニズムが必要です。どのように私は目標を達成するためにこれを修正するのですか?

もちろん、私はこれについてすべて間違っている可能性があります。おそらく、各列をインデックスで指定し、出力が必要な場合にのみ列名に変換する必要があります。思考?

+0

唯一の方法は、それはあなたが新しいユーザーに動的SQLを与えたときに、このようなことのために開示または警告のいくつかの並べ替えを追加するために本当に重要だ動的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

を使用している...それはすべての種類につながることができます彼らは対処する用意ができていない問題の – JNK

+0

申し訳ありません私はこのフォーラムを初めて使い、SQLの説明には使用していません。しかし、私は動的SQL +新しいユーザーがリスクがあることに同意します。ここではユーザは基本的な構文をすでに知っていたので、メモ帳に余分な行を追加するだけのケースでした。 –

1

tsqlと特に動的SQLを初めてお使いの方には、考慮する必要がある事項をよく読んでください。ほとんどの人は、動的SQLを発見すると、あらゆる種類の使用法や、それを使ってできることを考えます。しかし、私が言ったように...注意してください。これを達成するための

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

関連する問題