Sql 选择前检查列值是否存在
我有以下SQL语句:Sql 选择前检查列值是否存在,sql,Sql,我有以下SQL语句: SqlCommand myCmd = new SqlCommand("select distinct(year(date_created)) as theYear from content where folder_id = 1 or folder_id = 2 order by theYear desc", myConn); 此语句检查文件夹中的任何内容,然后设置一个下拉列表,使其与年份相等。但是,如果这些文件夹中都没有内容,则语句会自动弹出。这显然发生在每年新年内容还
SqlCommand myCmd = new SqlCommand("select distinct(year(date_created)) as theYear from content where folder_id = 1 or folder_id = 2 order by theYear desc", myConn);
此语句检查文件夹中的任何内容,然后设置一个下拉列表,使其与年份相等。但是,如果这些文件夹中都没有内容,则语句会自动弹出。这显然发生在每年新年内容还没有创建的时候。简单的答案是只创建一段内容,解决问题。我想确保它被设置好了,这样就没有人需要担心万一出了什么问题。那么,有没有办法在列尝试选择之前检查该列中是否有值
我尝试了以下方法:
SELECT DISTINCT (ISNULL(year(date_created), year(getdate()))) AS theYear
FROM content
WHERE folder_id = 1
OR folder_id = 2
ORDER BY theYear DESC
那似乎不起作用。我也尝试了计数,但要么是语法错误,要么是使用错误
有人能告诉我哪里出错了,正确的方法是什么吗?您更新的语句仍将应用where子句,以防止返回任何记录,无论是NULL还是其他记录
select distinct
(ISNULL(year(date_created), year(getdate()))) as theYear
from content
where folder_id = 1
or folder_id = 2
order by theYear desc
试着把它改成
DECLARE @yearTbl TABLE
(
date_created DATE
)
INSERT @yearTbl
SELECT date_created
FROM content
WHERE folder_id = 1
OR folder_id = 2
IF (SELECT count(*) FROM @yearTbl) = 0
SELECT year(getdate()) AS theYear
ELSE
SELECT DISTINCT year(date_created) AS theYear
FROM @yearTbl
ORDER BY theYear
您可以使用
UNION
将当前年份固定到数据集。由于UNION
删除了重复项,因此它是否已存在于内容中并不重要:
SELECT YEAR(date_created) AS theYear
FROM Content
WHERE folder_id IN (1, 2)
UNION
SELECT YEAR(GETDATE())
ORDER BY theYear DESC;
如果您只希望在没有数据的情况下显示当前年份,那么您可以在第二个查询中放入并检查存在
:
SELECT YEAR(date_created) AS theYear
FROM Content
WHERE folder_id IN (1, 2)
UNION
SELECT YEAR(GETDATE())
WHERE NOT EXISTS (SELECT 1 FROM Content WHERE folder_id IN (1, 2) )
ORDER BY theYear DESC;
不相关,但:distinct
不是函数。你是如何分配给下拉列表的,你能检查一下逻辑吗there@a_horse_with_no_name谢谢你的澄清!这就是我得到它时的代码,我不知道这是不正确的。@TheGameswar SQL语句get作为下拉列表的数据源传递。我认为最好在应用逻辑之前检查数据是否存在。这不正确吗?有了你的回答,我对这个问题理解得更清楚了。是否可以只在一个SELECT语句中执行相同的操作?如果在date_created中有日期,但数据中不存在当前年份,该怎么办?我的理解是,如果没有数据,只显示当前日期。@JotaPardo好的,我想我误解了。我在原始查询中添加了一个WHERE
子句,以确保它只出现在没有数据的地方。@GarethD您的第一个语句最终对我有效。它将2017年添加到了名单中,并且没有干扰任何应该存在的前几年。非常感谢。