2013-03-06 119 views
0

我可以指定DEFAULT以获取列的确切值吗?SQL创建表[默认]

我正在创建一个Serial表,有范围,有的有FromTo,有的只是单数。

因此,我有两列:[Serial_Fr] & [Serial_To]

如果我插入Serial_Fr只,我想填充Serial_To = Serial_Fr

我该怎么做?或者我应该使用触发器,并设置默认值='',在这样做时,我认为这会在我拥有数百万个连续剧时造成压力。

+2

*** *** SQL刚好在*结构化查询语言* - 许多数据库系统使用的语言,但不是数据库产品...许多东西都是特定于供应商的 - 所以我们真的需要知道您的数据库系统**(以及哪个版本)使用.... – 2013-03-06 06:38:04

+1

MSSQL对不起,在急于打字。 – Sid 2013-03-06 06:44:32

+2

你必须使用一个触发器,但你也可以在查询表时将它保留为NULL并处理它。类似于'BETWEEN Serial_Fr AND ISNULL(Serial_To,Serial_Fr)' – 2013-03-06 06:51:05

回答

0

创建视图是

CREATE VIEW MyView AS 
SELECT 
    Serial_Fr, 
    Serial_To = COALESCE(Serial_To,Serial_Fr) 
FROM MyTable 

否则,可能在Stored Procedure

做,但什么是错的留下一些Serial_To作为NULL条目?


编辑

ISNULLT-sql是:COALESCE是92标准的SQL。有这些功能HERE ON SO

马丁·史密斯也指有说明了差异这个有趣的例子文章之间的细微差别了很好的讨论:

DECLARE @test VARCHAR(2) 
DECLARE @first VARCHAR(4) 
DECLARE @second VARCHAR(4) 

SELECT @first = ISNULL(@test, 'test') 
SELECT @second = COALESCE(@test, 'test') 

PRINT @first 
PRINT @second 
+0

我没有得到这个解决方案...对不起。有时候,我将串行从串行连接填充到不同的位置。不总是一样的 – Sid 2013-03-06 09:23:03

+0

好 - 只是解决方案的视图部分将工作 - 虽然我需要稍微修改它 – whytheq 2013-03-06 09:30:18

+0

@Sid你尝试创建一个视图吗? – whytheq 2013-03-08 07:22:42