我目前正致力于SQL Server 2014上的T-SQL查询。
我尝试从1个表格中选择数据到另一个表格,并为每一行添加额外的ID。
我的查询如下:
DECLARE @TargetId = 1
SELECT * INTO #tmpProjects FROM @Projects
UNION SELECT @TargetId AS 'TargetId'
不幸的是,这个Select语句不起作用......
我想要的输出 #tmpProjects 应如下所示:
ProjectId | Title | Manager | TargetId
----------+-------------+-----------+-----------
1 | projectX | 1123 | 1
2 | projectY | 2245 | 1
3 | projectZ | 3335 | 1
在我的导入表 @Projects 中,我得到了ProjectId,Title和Manager列。
您知道如何解决这个问题吗?那么要选择一个临时表并添加一个额外的Id?
非常感谢!!
答案 0 :(得分:1)
如果要在表中添加额外的列,则需要更改它以添加新列。 要保留列中的默认值,您可以使用 DEFAULT 关键字并提供值。 请在下面找到查询,我希望这会有所帮助:
CREATE TABLE PROJECTS(ProjectId int, Title varchar(50), Manager varchar(50))
INSERT INTO PROJECTS
VALUES
(1, 'projectX' , '1123'),
(2, 'projectY' , '2245'),
(3, 'projectZ' , '3335')
GO
BEGIN
SELECT * INTO #tmpProjects FROM PROJECTS
ALTER TABLE #tmpProjects ADD TargetId INT NOT NULL DEFAULT (1)
SELECT * FROM #tmpProjects
END
您不能在default关键字中使用任何变量。但是你可以创建一个标量函数来使用你选择的任何变量。 您可以查看此链接,了解如何使用标量函数将默认值添加到列中。
ALTER TABLE with programmatically determined constant DEFAULT value
此处还有一件事。如果要使用 DEFAULT 关键字插入默认值,则必须明确将列定义为 NOT NULL 。 如果您没有这样做,那么它只会包含 NULL 值,并且不会插入您使用 DEFAULT 关键字提供的任何值
代码:
ALTER TABLE #tmpProjects ADD TargetId INT NOT NULL DEFAULT (1)
这会在TargetId列中插入 1 。但是,
ALTER TABLE #tmpProjects ADD TargetId INT DEFAULT (1)
这将在TargetId列中插入 NULL
希望这能解决您的问题。
答案 1 :(得分:1)
create table #tmpProjects
(
ProjectId varchar(20) ,
Title varchar(20) ,
Manager varchar(20),
TargetId varchar(20)
)
DECLARE @Projects table (ProjectId varchar(20) , Title varchar(20) ,Manager varchar(20))
insert into @Projects values ('p1' , 't1' , 'm1')
insert into @Projects values ('p2' , 't2' , 'm2')
select * from @Projects
------------- **solution starts here** ---------------
DECLARE @TargetId int
set @TargetId = 1
insert into #tmpProjects ( ProjectId ,Title , Manager , TargetId )
select ProjectId ,Title , Manager , @TargetId
from @Projects
select * from #tmpProjects