在SQL 2005/8中,我希望将select查询中的列转换为NOT NULL列。
coalease()
和isnull()
,虽然功能很好,但并不是我想要的。我希望select抛出错误,任何数据都是NULL。
这可能吗?
[更新] 显然,最好的方法是修改源表,不幸的是,在这种情况下,它不是一个(成本效益)选项。
答案 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
时,您将收到错误。