Sql server 可以将可为NULL的列强制转换为非NULL列吗?
在SQL2005/8中,我希望将select查询中的一列转换为NOTNULL列Sql server 可以将可为NULL的列强制转换为非NULL列吗?,sql-server,null,Sql Server,Null,在SQL2005/8中,我希望将select查询中的一列转换为NOTNULL列 coalease()和isnull(),虽然函数很好,但不是我想要的。如果任何数据为空,我希望select抛出一个错误 这可能吗 [更新] 显然,最好的方法是修改源表,不幸的是,在这种情况下,它不是一个(经济高效的)选项。如果您想在(非sql)代码端抛出错误,您唯一的选择是 $result = db.query("SELECT count(1) FROM table WHERE column_that_should_
coalease()
和isnull()
,虽然函数很好,但不是我想要的。如果任何数据为空,我希望select抛出一个错误
这可能吗
[更新]
显然,最好的方法是修改源表,不幸的是,在这种情况下,它不是一个(经济高效的)选项。如果您想在(非sql)代码端抛出错误,您唯一的选择是
$result = db.query("SELECT count(1) FROM table WHERE column_that_should_not_be_null IS NULL")
assert($result = 0);
如果要将列转换为不接受
NULL
,则在执行更改表时。。。设置为NOTNULL,您将得到一个错误。您请求的内容不存在
NOTNULL是一个约束。SELECT语句不强制执行约束。仅在插入/更新/删除数据期间强制执行约束。如果需要强制执行约束,请通过ALTERTABLE在表上声明约束。。。加上
如果要返回非null数据,请使用诸如ISNULL或COALESCE之类的null转换函数 一个奇怪的要求,但我认为这满足了它:
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
如果查询在空值上出错…这意味着空值不属于。为什么不在列上加一个NOTNULL约束呢?您希望select什么时候抛出一个null?空约束选项听起来是最好的主意,如果错误再次出现,就捕获它。这应该只是一次活动,对吗?您想要什么类型的错误?t-Sql错误?太棒了-绕过语言限制的好方法。