可以将可为空的列转换为NOT NULL列吗?

时间:2009-12-28 23:13:13

标签: sql-server null

在SQL 2005/8中,我希望将select查询中的列转换为NOT NULL列。

coalease()isnull(),虽然功能很好,但并不是我想要的。我希望select抛出错误,任何数据都是NULL。

这可能吗?

[更新] 显然,最好的方法是修改源表,不幸的是,在这种情况下,它不是一个(成本效益)选项。

3 个答案:

答案 0 :(得分:7)

你要求的东西不存在。

NOT NULL是约束。 SELECT语句不强制执行约束。约束仅在INSERT / UPDATE / DELETE数据期间强制执行。如果需要强制执行约束,请通过ALTER TABLE ... ADD ...

在表上声明约束

如果要返回非空数据,请使用空转换函数,如ISNULL或COALESCE。

答案 1 :(得分:5)

一个奇怪的请求,但我认为这符合它:

DECLARE @TABLE TABLE
(
    ID INT IDENTITY(1,1) NOT NULL,
    Val VARCHAR(100) NULL
)

INSERT INTO @TABLE(Val)
SELECT 'Hello' 
UNION SELECT 'World' 
UNION SELECT NULL --Remove this line to prevent failure

SELECT 
  ID, 
  CASE WHEN Val IS NULL THEN CAST(1/0 AS VARCHAR) ELSE Val END AS ValCheck 
FROM @TABLE

答案 2 :(得分:0)

如果你想在(非sql)代码方面抛出一个错误,你唯一的选择就是

$result = db.query("SELECT count(1) FROM table WHERE column_that_should_not_be_null IS NULL")
assert($result = 0);

如果您想将列转换为不接受NULL,那么当您执行ALTER TABLE ... SET NOT NULL时,您将收到错误。