SELECT,使用 SQL Server 临时操作数据

Posted

技术标签:

【中文标题】SELECT,使用 SQL Server 临时操作数据【英文标题】:SELECT, manipulate data temporary using SQL Server 【发布时间】:2011-08-09 08:30:08 【问题描述】:

数据库有一个“结束日期”字段,1753/1/1 应该是什么都不代表的值,因为我们不能在 SQL Server 中将 null 分配给 datetime..

在报告应用程序中使用的选择查询,获取包括那些 1753 日期值的数据。不错

问题

1753 日期导致报表计算出错。报告中有很多计算,更改代码忽略1753会很头疼,所以我在想

有没有办法告诉SQL Server:

SELECT * 
FROM TABLE BUT IN END_DATE 
WHERE VALUE='1753/1/1 01:00:00.000' REPLACE WITH PARAMETER1

CRUDE EDIT(目前无权访问调试器)

我不记得了,但我收到了类似

的错误

什么都不应该映射到某物上

当我尝试插入具有空日期的记录时!仅当在 C# 中使用 VB.NET 时才会发生这种情况,它工作正常。你知道为什么吗??

【问题讨论】:

顺便说一句,为什么不能将 null 分配给 SQL Server 中的日期时间? 我不记得了,但是当我插入带有空日期的记录时,我得到并错误地说什么都不应该映射到某些东西上!仅当在 csharp 中使用 VB.NET 时才会发生这种情况,它工作正常。你知道为什么吗?? 发布您的代码在保存 null 时会引发错误,可能是因为 DateTIme 是值类型,所以您不能分配 NULL,所以您必须将 SqlDateTime() 对象保存到 dateTime 列中跨度> 就是这样,我会模拟问题并尽快发布 您是否也在过滤“开始日期”? 【参考方案1】:
SELECT * 
FROM TABLE
WHERE END_DATE = 
 CASE VALUE 
   WHEN VALUE = '1753/1/1 01:00:00.000' THEN PARAMETER1 
   ELSE VALUE
 END

编辑:对 cme​​ts 的回答

您不能将NULL 分配给DateTime 字段,因为DateTime 是一种值类型,因此它不能持久化NULL。使用SqlDateTime.NULL 将NULL 值传递给存储过程或查询自身。 如果你能提供应该通过NULL 的代码 - 我可以给你更详细的例子。

【讨论】:

【参考方案2】:

虽然我觉得应该用null来表示某事没有值,你可以试试:

SELECT MyDate = CASE END_DATE   
    WHEN '1753/1/1 01:00:00.000' THEN YourDefaultValue
    ELSE END_DATE
END 

详情请见msdn。

【讨论】:

【参考方案3】:
    SELECT field1, field2, field3, 
        'NEW_END_DATE' = CASE CAST(END_DATE AS DATE) = '1753-1-1' 
             THEN @Parameter 
             ELSE END_DATE 
         END
    FROM TABLE;

【讨论】:

【参考方案4】:

你需要用一个案例

SELECT case when date_field = '1753/1/1 01:00:00.000' then @PARAMETER1
ELSE date_field END
FROM TABLE 

【讨论】:

【参考方案5】:

我猜您可能正在寻找类似的东西(请注意,您不能使用 SELECT * 来执行此操作;您必须明确选择所需的列,除非您想使用不同的名字。)

SELECT 
   CASE 
      WHEN END_DATE = > '1753/1/1 01:00:00.000' THEN END_DATE 
      ELSE PARAMETER1 
   END 'END_DATE',
   other_columns...
FROM
   TABLE 

但实际上,我建议您更改您的设计以使用 NULL 而不是您正在使用的这个奇怪的结束日期。 DATETIME 列没有什么特别之处可以阻止它们为 NULLable。我曾经参与过一个项目,有人用愚蠢的“无效”日期值做了类似的事情,但它导致了无穷无尽的问题。

【讨论】:

这种情况只有在使用 vb.net 时才会发生!知道为什么。 嗯,听起来@sll 可以解决这个问题,所以我会听从这个建议并改用NULL。它可能会让你的生活更轻松。

以上是关于SELECT,使用 SQL Server 临时操作数据的主要内容,如果未能解决你的问题,请参考以下文章

怎么修改SQL SERVER2008的select产生的临时结果存放的位置?每次查询行数较多的结果都会把C盘占满。

SQL Server,临时表,SELECT 语句不起作用

SQL SERVER2008里面sql语句删除临时表失败

sql server 临时表

sqlserver 2008 关于存储过程中的临时表。

SQL Server 内联查询是不是在后台创建临时表