【问题标题】:Use case statement for parameter for column name in sql where clausesql where子句中列名参数的用例语句
【发布时间】:2018-02-21 07:08:07
【问题描述】:

我整天都在寻找适合我情况的解决方案。我发现了一些非常相似但不适用于我的情况的东西,我试过了。

这是场景;我有两个表底和部分细节。我有一个 asp 网站(仅限内部),它有下拉列表来选择填充数据网格视图的 SQL 查询的参数。

我的问题是这样的,我需要能够根据页面上的下拉列表框,指定要搜索的输入条件的列名。

这是我试图定义的查询:(这个返回 0 行)

sqlCmd.CommandText = ("Select ba.referenceid, ba.partnum, pd.width, pd.length, CONVERT(varchar(12), pd.dateentered, 101) As [dateentered], ba.partqty, ba.status, ba.material From tbl_dlbase ba Join tbl_partdetails pd On ba.referenceid = pd.referenceid Where Case @field1 When 'part #' Then 'ba.partnum' When 'Spacing' Then 'pd.spacing' When 'Surface' Then 'pd.surface' When 'Height' Then 'pd.height' When 'Thickness' Then 'pd.thickness' End Like '%' + @criteria1 + '%'")

sqlCmd.Parameters.AddWithValue("@field1", ddlSc1.SelectedItem.Text)
sqlCmd.Parameters.AddWithValue("@criteria1", txbCriteria1.Text)

这是我尝试过的最新版本的 SQL 语句。我需要能够根据从 asp 页面上的下拉列表 ddlsc1 中的选择来设置字段/列名称。

我也一直在尝试 Studio manager 中的查询,看看我是否有粗心大意的东西,但它也返回 0 行,所以我知道查询有问题。

那么如何使用名称参数设置列名称字段。我知道这是 SQL 注入的一个巨大安全问题,但这是一个仅限内部的站点,更重要的是我的老板说他希望使用变量来完成。

【问题讨论】:

  • 考虑到我使用变量作为名称,我认为它是动态的。那究竟什么是动态 SQL?
  • 这里不需要动态,从您当前查询的外观来看,我认为您不知道自己需要什么。
  • "我整天都在寻找适合我情况的解决方案。我发现了一些非常相似但不适用于我的情况的东西,我试过了。" 嗯,如果这是真的,您似乎已经知道动态 SQL 是什么(这是互联网上非常常见的请求)。请向我们展示您已经尝试过的“不适用于我的情况”的方法。

标签: asp.net sql-server vb.net tsql


【解决方案1】:

除了您的 THEN 值周围有单引号之外,我并没有真正看到这个问题。这能解决问题吗?

SELECT ba.referenceid
    ,ba.partnum
    ,pd.width
    ,pd.length
    ,CONVERT(VARCHAR(12), pd.dateentered, 101) AS [dateentered]
    ,ba.partqty
    ,ba.STATUS
    ,ba.material
FROM tbl_dlbase ba
JOIN tbl_partdetails pd ON ba.referenceid = pd.referenceid
WHERE CASE @field1
        WHEN 'part #'
            THEN ba.partnum
        WHEN 'Spacing'
            THEN pd.spacing
        WHEN 'Surface'
            THEN pd.surface
        WHEN 'Height'
            THEN pd.height
        WHEN 'Thickness'
            THEN pd.thickness
        END LIKE '%' + @criteria1 + '%'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多