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