在 T-SQL 中,如何编写查询来为列的任何整数值选择行?
比如数据是这样的
NAME,AGE
A,10
B,20
C,10
D,20
还有一个 <asp:dropdownlist>
有两个选项,10,20
,以便用户可以选择 10
或20
。如果用户选择10
或20
,数据被正确拉取,但是我怎么说*
健康)状况?? - 就像为 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/