如何在SELECT查询中使用默认值?

时间:2014-09-15 08:37:27

标签: sql sql-server tsql

我创建了一个默认值:

create default [dbo].[MAX_DATE] as '31/12/9999 23:59:59'

现在我想从sql查询中返回它。我试过这个:

SELECT 
    CASE date_field WHEN dbo.MAX_DATE THEN '' ELSE date_field END
FROM
    myTable

但是,我收到以下错误:

Server: Msg 107, Level 16, State 2, Line 2
The column prefix 'dbo' does not match with a table name or alias name used in the query.

1 个答案:

答案 0 :(得分:2)

通过将它们绑定到列来使用默认值。当创建行并且未指定列值时,服务器将应用默认值。 (见:http://msdn.microsoft.com/en-us/library/ms173565.aspx

以下是3个选项:

选项(1) 看起来您正在使用"命名常量"用于做比较。在这种情况下,您可能希望使用函数,例如:

CREATE Function [dbo].[MAX_DATE] () 
    Returns Datetime 
    as 
    BEGIN
    Return '99991231 23:59:59'
    END;
GO

select dbo.MAX_DATE()

选项(2) 您可能考虑的另一个选项是拥有一个名为常量的表。它可能包含以下列:ID(自动编号),ValueName,numValue,strValue,dtValue,binValue。您可以根据您在其中存储的值的类型填充ValueName和相应的列。

选项(3) 要在当前脚本中使用常量,可以声明一个值并设置它的值,并在脚本的其余部分中使用它。这些变量超出了批处理范围,因此要么在脚本运行完毕,要么SQL遇到GO语句。 E.g。

DECLARE @MAX_VALUE as datetime
set @MAX_VALUE  = '99991231 23:59:59'
select @MAX_VALUE