2

SQLテーブルにtext_en、text_es、text_deなどの列があります。ここで、言語に応じて1つの列から値を取得したいと思います。そこで、SQL文字列を作成 SELECT @textfield FROM <table> し、vbコードで使用し cmd.AddWithValue("textfield", "text_" + lang) ますが、SQLは、その列の値ではなく、列の名前を返します。どうすれば値を取得できますか?

4

3 に答える 3

3

あなたもすることができます

SELECT CASE @textfield
         WHEN 'text_en' THEN text_en
         WHEN 'text_es' THEN text_es
         WHEN 'text_de' THEN text_de
       END AS local_text
FROM TableName
于 2012-11-13T15:14:54.653 に答える
2

パラメータとして渡すのではなく、文字列リテラルとして渡します。SQLステートメントは次の形式である必要があります。

string col1name = 'somename';
string sql = 'SELECT ' + col1name + ' FROM TableName';

ただし、WHERE句にパラメータを渡した場合は、質問で行ったのと同じようにパラメータとして渡す必要があります。

注:この方法でのクエリは、SQLインジェクションに対して脆弱です。あなたの場合、連結されたSQLステートメントをストアドプロシージャに渡してから、sp_executesqlではなくを使用できEXEC()ます。

于 2012-11-13T15:07:46.693 に答える
2

とにかく、SQLの列名である変数を使用することはできません。

このような列名を指定するには、動的SQLを使用する必要があります。

主題の包括的な取り扱いについては、動的SQLの呪いと祝福を読むことをお勧めします。

于 2012-11-13T15:09:16.313 に答える