2

我在 SQL 表中有一些列,例如 text_en、text_es、text_de。现在我想根据语言从一列中检索值。所以我创建了一个 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 Injection的攻击。在您的情况下,您可以将连接的 SQL 语句传递给存储过程,然后使用sp_executesql,而不是EXEC()

于 2012-11-13T15:07:46.693 回答
2

无论如何,您不能使用变量是 SQL 中的列名,而不是这样。

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

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

于 2012-11-13T15:09:16.313 回答