使用基于以下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
)
答案 0 :(得分:2)
“我是否将select语句中的所有字段都包含在create语句中?”嗯,如果你需要它,那取决于是,如果不是没有。我们不可能说你是否需要它们......如果你运行这个确切的查询为insert
,那么就是。
对于create语句,您可以运行查询,但将into #StagedData
替换为into TEMP_StagedData
。在管理工作室中,您可以让sql server为您构建创建查询:右键单击对象资源管理器中新创建的TEMP_StagedData
表(请记住刷新),script Table as
,CREATE 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
语句。