如何创建包含多个列的表

时间:2015-12-18 11:55:57

标签: sql sql-server

使用基于以下select into语句的create table语句挣扎:

@MaxAPDRefundAmount     money = 13.00 

...

    select pkd.*,  pd.ProviderReference, per.FirstName, per.Surname, @MaxAPDRefundAmount [MaxAPDRefundAmount],commission.Type [Commission] into #StagedData from CTE_PackageData pkd
                        inner join J2H.dbo.Package pk on pkd.Reference = pk.Reference
                        inner join J2H.dbo.Product pd on pk.PackageId = pd.PackageId
                        inner join J2H.dbo.FlightReservation fr on pd.ProductId  = fr.ProductId
                                and fr.FlightBoundID = 1
                        inner join J2H.dbo.ProductPerson pp on pd.ProductId = pp.ProductID
                            and pp.StatusId < 7
                        inner join J2H.dbo.Flight f on fr.FlightId = f.FlightID
                        inner join J2H.dbo.Person per on pk.PackageId = per.PackageId
                                    and per.PersonId = pp.PersonId
                        inner join J2H.dbo.PersonType pt on per.PersonTypeId = pt.PersonTypeID

我们正在将select更改为正常插入和选择,因此需要一个create table(我们将创建一个temp(散列标记表)而不是声明一个变量表。还有一个pkd。*在我也很难知道要在create table中包含哪些字段。我是否将select语句中的所有字段都包含在create语句中?

更新

所以实际上我知道我需要包含下面的数据类型,但我可以这样做:

create table #StagedData
        (
                pkd.*,  
                pd.ProviderReference, 
                per.FirstName, 
                per.Surname, 
                @MaxAPDRefundAmount [MaxAPDRefundAmount],
                commission
        )

3 个答案:

答案 0 :(得分:2)

“我是否将select语句中的所有字段都包含在create语句中?”嗯,如果你需要它,那取决于是,如果不是没有。我们不可能说你是否需要它们......如果你运行这个确切的查询为insert,那么就是。

对于create语句,您可以运行查询,但将into #StagedData替换为into TEMP_StagedData。在管理工作室中,您可以让sql server为您构建创建查询:右键单击对象资源管理器中新创建的TEMP_StagedData表(请记住刷新),script Table asCREATE To并选择New Query Editor Window

答案 1 :(得分:0)

要从SELECT创建表而不插入数据,请添加一个永不返回True的WHERE子句。

像这样:

SELECT * INTO #TempTable FROM Table WHERE 1=0

包含SELECT列的表后,可以使用ALTER TABLE添加其他列。

ALTER TABLE #TempTable ALL ExtraColumn INT

然后执行INSERT / SELECT。

答案 2 :(得分:0)

CREATE TABLE语句的文档非常简单。

没有。显然,您无法在pkd.*语句中使用create table

您可以做的是将旧的SELECT INTO语句作为直接SELECT(删除INTO #stagedata)部分运行,并查看SELECT返回的列。

然后编写包含这些列的CREATE TABLE语句。

相关问题