列名作为参数

时间:2012-11-13 15:05:12

标签: asp.net sql select

我在SQL表中有一些像text_en,text_es,text_de这样的列。现在我想根据语言从一列中检索值。 所以我创建了一个sql字符串 SELECT @textfield FROM <table> 在我使用的vb代码中 cmd.AddWithValue("textfield", "text_" + lang) 但是sql返回列的名称而不是该列的值。我怎样才能获得价值?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

不要将其作为参数传递,将其作为字符串文字传递。您的sql语句应采用以下格式:

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

但是如果你有一个传递给WHERE子句的参数,你应该将它作为参数传递给你,就像你在问题中所做的那样。

请注意:您的查询,这种方式容易受到SQL Injection的攻击。在您的情况下,您可以将连接的SQL语句传递给存储过程,然后使用sp_executesql,而不是EXEC()

答案 2 :(得分:2)

你不能在SQL中使用变量是列名,反正不是这样。

您需要使用动态SQL来指定像这样的列名。

我建议您阅读The Curse and Blessings of Dynamic SQL以全面了解该主题。