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); 此语句检查文件夹中的任何内容,然后设置一个下拉列表,使其与年份相等。但是,如果这些文件夹中都没有内容,则语句会自动弹出。这显然发生在每年新年内容还

我有以下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);
此语句检查文件夹中的任何内容,然后设置一个下拉列表,使其与年份相等。但是,如果这些文件夹中都没有内容,则语句会自动弹出。这显然发生在每年新年内容还没有创建的时候。简单的答案是只创建一段内容,解决问题。我想确保它被设置好了,这样就没有人需要担心万一出了什么问题。那么,有没有办法在列尝试选择之前检查该列中是否有值

我尝试了以下方法:

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年添加到了名单中,并且没有干扰任何应该存在的前几年。非常感谢。