我在 SQL 表中有一些列,例如 text_en、text_es、text_de。现在我想根据语言从一列中检索值。所以我创建了一个 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 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 回答