Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用SQL Server SELECT INTO创建不可为空的列_Sql Server - Fatal编程技术网

Sql server 使用SQL Server SELECT INTO创建不可为空的列

Sql 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

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 
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来说太难推断了。