我想基于另一个表创建一个新表。另外,我想同时创建新变量,指定其数据类型并指定默认值。
我的代码现在是以下内容:
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
提前感谢您的帮助!
答案 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