从一个表到另一个表中选择列,并同时创建具有默认值的变量

时间:2015-04-15 23:02:59

标签: sql sql-server-2008 tsql

我想基于另一个表创建一个新表。另外,我想同时创建新变量,指定其数据类型并指定默认值。

我的代码现在是以下内容:

IF OBJECT_ID('TEMPDB.DBO.#test2') IS NOT NULL
    DROP TABLE #test2
SELECT TOP 100
    ID_number
    ,name = CHAR(10)
INTO #test2
FROM #test1

以下不起作用:

IF OBJECT_ID('TEMPDB.DBO.#test2') IS NOT NULL
    DROP TABLE #test2
SELECT TOP 100
    ID_number
    ,name = CHAR(10) DEFAULT 'asdf'
INTO #test2
FROM #test1

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

尝试这样的事情。

SELECT TOP 100
    ID_number
    , CONVERT(CHAR(10), ISNULL(name, 'asdf'))
INTO #test2
FROM #test1

它不会向新表添加默认约束,但会替换任何空值。它还应该选择CHAR(10)类型。但可以肯定的是,我建议明确创建表格以控制其结构。

另请注意:如果要将空字符串视为空值,请使用:

ISNULL(NULLIF(name, ''), 'DefaultValue')

答案 1 :(得分:0)

当然,这是对您的表做出一些假设,但如果您使用#test1创建#test2,这可能是您问题的解决方案。这也假定您在拥有NULL或空字符串时使用默认值。

如果您提供更多信息,我可以修改答案。

-- Creates some basic schema/data
CREATE TABLE #test1 (
    ID_number INT IDENTITY(1,1),
    name CHAR(10)
)

INSERT INTO #test1
SELECT TOP 100 LEFT(o.name,10)
FROM sys.objects o

UPDATE #test1
SET name = NULL
WHERE ID_number % 5 = 0

UPDATE #test1
SET name = ''
WHERE ID_number % 7 = 0

-- Your answer here
IF OBJECT_ID('tempdb.dbo.#test2') IS NOT NULL
    DROP TABLE #test2

SELECT TOP 100
    ID_number,
    CASE 
        WHEN name IS NULL THEN 'DEFAULT'
        WHEN LTRIM(RTRIM(name)) = '' THEN 'DEFAULT'
        ELSE name
    END AS name
INTO #test2
FROM #test1

-- Verification and cleanup
SELECT * FROM #test2
SELECT * FROM #test1

DROP TABLE #test1