SQL Server可以创建临时表,所有列都可以自动为空吗?

时间:2014-01-07 09:42:12

标签: sql sql-server

通过使用以下查询,将创建临时表testingTemp,并且列的定义取决于oriTable。(我猜)

Select a.ID AS [a], 
       b.ID AS [b], 
       c.ID AS [c]
INTO #testingTemp
FROM
oriTable

我的第二个问题如下:

Insert into #testingTemp (c)
Select z.ID AS [c]
FROM
oriTable

现在当我执行第二个查询时,SQL Server投诉

Cannot insert the value NULL into column 'a' , table 'tempdb.dbo.testingTemp...blabla

我是否知道如何在不更改oriTable结构的情况下解决此问题?

3 个答案:

答案 0 :(得分:5)

使用

SELECT ID + 0 AS [a],
       ID + 0 AS [b],
       ID + 0 AS [c]
INTO   #testingTemp
FROM   oriTable 

通过表达式计算的列的可为空性几乎总是假定为NULL而不是NOT NULL

答案 1 :(得分:0)

试试这个:

ALTER TABLE #testingTemp ALTER COLUMN [a] int NULL

答案 2 :(得分:0)

试试这个:

在第一次插入期间尝试将具有约束(主键或非空)的列转换为各自的数据类型。

Select convert(int,a.ID) AS [a], 
       b.ID AS [b], 
       c.ID AS [c]
INTO #testingTemp
FROM
oriTable

因为我们使用了convert函数,所以约束结构(主要或非空约束)不会复制到临时表。 现在你可以轻轻地触发第二个insert语句,它将执行而不会出现任何错误。

Insert into #testingTemp (c)
Select z.ID AS [c]
FROM
oriTable