asp.net - SQL LIKE % 对于整数

标签 asp.net sql sql-server tsql

在 T-SQL 中,如何编写查询来为列的任何整数值选择行?

比如数据是这样的

NAME,AGE
A,10
B,20
C,10
D,20

还有一个 <asp:dropdownlist>有两个选项,10,20 ,以便用户可以选择 1020 。如果用户选择1020 ,数据被正确拉取,但是我怎么说*健康)状况?? - 就像为 age 中的任何值选择所有数据专栏??

我的代码如下,

select ...where (AGE = @AGE)

<SelectParameters> <asp:ControlParameter ControlID="DropDownList1" Name="AGE" PropertyName="SelectedValue" DbType="Int32" DefaultValue="ANY"

此外,下面的查询在 SSMS 中工作得很好,但是如何在 asp.net SqlDataSource 中实现此行为??

SELECT * FROM [TABLE] where AGE is not null

如果 AGE 列是 varchar 类型,我可以使用“%”,但它是一个数字字段

谢谢

最佳答案

要提供 ALL/ANY 选项,您需要指定一个哨兵值(一个永远不会存在于数据集中的值),以便您可以检查提交给存储过程的变量,以便知道何时忽略该值变量并使用正确的 WHERE 子句。

IE:如果下拉列表中有一个元素的显示文本为“全部”,且值为-1,则以下动态 SQL 将是合适的:

DECLARE @SQL NVARCHAR(MAX)

   SET @SQL = N'SELECT * 
                  FROM [YOUR_TABLE]
                 WHERE 1 = 1 '

   SET @SQL = @SQL + CASE 
                       WHEN @age > 0 THEN 
                         ' AND age = @age '
                       ELSE 
                         ' AND age IS NOT NULL '
                     END

BEGIN

  EXEC sp_executesql @SQL N'age INT', @age

END

参见this link for more details about dynamic SQL in TSQL/SQL Server .

但是您不必使用动态 SQL - 这是等效的:

IF @age > 0 
BEGIN

   SELECT * 
     FROM [YOUR_TABLE]
    WHERE age IS NOT NULL

END
ELSE
BEGIN

   SELECT * 
     FROM [YOUR_TABLE]
    WHERE age = @age

END

...只是您可以想象,如果您有多个彼此独立的参数,这会变得多么笨拙。

关于asp.net - SQL LIKE % 对于整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4066251/

相关文章:

c# - 是什么导致 "The wait completed due to an abandoned mutex"?

c# - 使用 SimpleMembershipProvider 更新自定义用户配置文件字段?

sql - 在三个单独的列中计算值 - Rails/SQL

sql-server - sql 检查字符串是否包含 where 子句

sql-server - 当我的 SQL Server 数据库设置为 Latin1_General_100_CI_AI 时出现大小写和排序规则问题

javascript - 在不使用 JavaScript 的情况下通过 iframe 访问时从页面重定向?

c# - 使用 WCF 服务从 CMS 获取数据的 Asp.Net Webforms 应用程序的性能

asp.net - 如何在 Google App Engine 上托管 ASP.NET MVC 5.1 应用程序

sql - Rails 3,选择 has_many(左连接)

sql-server - 是否可以知道一个存储过程是否在另一个存储过程中被调用?