Sql server 使用SQL Server SELECT INTO创建不可为空的列
RTRIM和LTRIM使列可以为空。我如何使它们不可为nullSql server 使用SQL Server SELECT INTO创建不可为空的列,sql-server,Sql Server,RTRIM和LTRIM使列可以为空。我如何使它们不可为null CREATE TABLE SO_IN ( RAW NVARCHAR(10) NOT NULL ) ; GO SELECT RAW, RTRIM(RAW) AS RTRIM, LTRIM(RAW) AS LTRIM INTO SO_OUT FROM SO_IN; SELECT COLUMN_NAME, IS_NULLABLE FROM INFORMATION_SCHEMA.COLUMNS
CREATE TABLE SO_IN
(
RAW NVARCHAR(10) NOT NULL
) ;
GO
SELECT
RAW,
RTRIM(RAW) AS RTRIM,
LTRIM(RAW) AS LTRIM
INTO SO_OUT
FROM
SO_IN;
SELECT COLUMN_NAME, IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'SO_OUT'
输出将是:
COLUMN_NAME|IS_NULLABLE
-----------|-----------
RAW |NO
RTRIM |YES
LTRIM |YES
我希望它们都是可空的不比我想的更简单:
CREATE TABLE SO_IN
(
RAW NVARCHAR(10) NOT NULL
) ;
GO
SELECT
RAW,
ISNULL(RTRIM(RAW),'') AS RTRIM,
LTRIM(RAW) AS LTRIM
INTO SO_OUT
FROM
SO_IN;
SELECT COLUMN_NAME, IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'SO_OUT'
您必须申请使其成为SELECT*INTO的不可为空字段
CREATE TABLE SO_IN
(
RAW NVARCHAR(10) NOT NULL
) ;
GO
SELECT
RAW,
ISNULL(RTRIM(RAW),'') AS RTRIM,
ISNULL(LTRIM(RAW),'') AS LTRIM
INTO SO_OUT
FROM
SO_IN;
SELECT COLUMN_NAME, IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'SO_OUT'
以后是否可以更改创建的表?或者有什么理由不这样做吗?你可以用一些虚拟值来使用
coalesce()
。你知道为什么RTRIM本身不好吗?对不起,“足够好”做什么?我留下了第三个字段来解释空能力,请让我重新措辞。您知道为什么SQL引擎认为该列可以为空吗?为什么我要把它包装成空的?哈!这很简单:因为RTRIM(NULL)
将NULL
。也许你来自甲骨文?在oracle中,空字符串等于NULL(有时我认为这是一个“理论上不正确,实践上正确”的决定),我理解。在我的例子中,这不可能是真的,因为RAW不为NULL,但这对于sqlserver来说太难推断了。