【问题标题】:asp.net SqlDataSource select statement with IN (...) clause带有 IN (...) 子句的 asp.net SqlDataSource 选择语句
【发布时间】:2016-01-05 18:02:05
【问题描述】:

我需要将服务器端参数传递给我的 SqlDataSource SELECT IN 子句,如下所示(注意参数 @InClause 及其在 aspx 中定义的 SQL-select 中的位置(对于 SqlDataSource):

SELECT UID_REPORT, TXT_RPT_TEXT, TXT_RPT_NAME, TXT_RPT_ASPX_PAGE, TXT_RPT_TYPE 
FROM REPORTS WHERE (UID_REPORT IN (@InClause)) 
ORDER BY INT_SORT_ORDER

但这并没有通过测试查询操作中的验证。 '@InClause' 参数从 HiddenField 控件中获取它的值。 我想根据一些条件设置这个值。例如,如果 DIVISION=5,那么 @InClause 将 ="45,46" 否则 ="14,15"。 关于如何通过 hiddenfield.Value (当然是字符串)传递 IN ( ... ) 值的任何建议。 谢谢。

【问题讨论】:

  • 我在 Stack-Overflow 中搜索类似的问题/答案,而不是在互联网上查询。我将@VR46 标记为答案,尽管您的链接在存储过程的上下文中将解决方案隐藏在六种不同的方法中。谢谢。

标签: asp.net sql-server sqldatasource


【解决方案1】:

您需要split string 函数来执行此操作

SELECT uid_report, 
       txt_rpt_text, 
       txt_rpt_name, 
       txt_rpt_aspx_page, 
       txt_rpt_type 
FROM   reports 
WHERE  uid_report IN (SELECT split_value 
                      FROM   Udf_splitstring(@InClause, ',')) 
ORDER  BY int_sort_order 

检查以下链接以创建拆分字符串函数

  1. http://sqlperformance.com/2012/07/t-sql-queries/split-strings
  2. http://www.sqlservercentral.com/articles/Tally+Table/72993/

当然你也可以使用dynamic sql

【讨论】:

  • 您发布的代码是在 ASPX 页面选择命令中还是在 SQL-Server 脚本窗口中工作?我发布的选择代码位于 aspx 代码中的 SqlDataControl 中。
  • 我没有任何东西要验证
  • 我在 aspx 代码中的 SqlDataSource 选择命令中使用了您发布的 SQL 代码,它运行良好。我的 dbo 中有一个 splitString 函数,但我不知道我可以将它嵌入到 aspx 页面中。我在存储过程中多次使用它。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
  • 2011-08-25
相关资源
最近更新 更多