首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在表SQL Server 2008中追加具有唯一键值的新行

在表SQL Server 2008中追加具有唯一键值的新行
EN

Stack Overflow用户
提问于 2015-12-09 12:32:17
回答 2查看 30关注 0票数 0

我有一个包含以下示例数据的表id_test1

代码语言:javascript
运行
复制
P_Key   Name    phone   address     zip
1   a   123 NCR 1002
2   b   456 LKO 12045
3   c   789 BLR 3652
4   d   987 DLI 4528
5   e   654 NCR 7854

我有一个包含此数据的另一个表id_test2

代码语言:javascript
运行
复制
P_Key   Name    phone   address     zip
1   x   985 NCR 1002
2   y   562 LKO 12045
3   z   365 BLR 3652
4   q   362 DLI 4528
5   w   124 NCR 7854

我想将这些表合并到一个名为id_test的新表中。但是p_key列应该是唯一的。我想将这两个表的数据合并成一个表,如下所示:

代码语言:javascript
运行
复制
P_Key   Name    phone   address     zip
1   a   123 NCR 1002
2   b   456 LKO 12045
3   c   789 BLR 3652
4   d   987 DLI 4528
5   e   654 NCR 7854
6   x   985 NCR 1002
7   y   562 LKO 12045
8   z   365 BLR 3652
9   q   362 DLI 4528
10  w   124 NCR 7854

我曾经在Oracle数据库中工作过,并且我是SQL Server 2008的新手。请提供您的建议。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2015-12-09 12:51:38

在SQL中,有一个整洁的小工具,叫做if exists。

它不是完美的,但对于初学者来说,它工作得很好。

由于我不理解您的结构,让我们假设您有一个简单的ID和姓名表。ID必须唯一。

代码语言:javascript
运行
复制
You want to add
ID=1, Name=A
ID=2, Name=B
ID=1, Name=C

You want it to end up with:
ID=1, Name=A:C
ID=2, Name=B

您的SQL如下所示:

代码语言:javascript
运行
复制
@ID = <id of thing you are inserting>
@NAME = <name of thing you are inserting>

if exists (select * from table where ID = @ID)
BEGIN
   UPDATE table set NAME = NAME + ',' + @NAME where ID = @ID
END
else
BEGIN
   INSERT values (@ID, @NAME) into table
END

我的SQL语法可能需要一些细微的编辑,但您应该明白这一点。例如,我怀疑我是否有正确的语法来连接varchars。

票数 0
EN

Stack Overflow用户

发布于 2015-12-11 17:15:51

如果在新表中使用P_Key的标识列,则以下查询将执行此任务

代码语言:javascript
运行
复制
INSERT INTO id_test
(
    Name,phone,address,zip
)
SELECT Name,phone,address,zip FROM id_test1 ORDER BY P_Key

INSERT INTO id_test
(
    Name,phone,address,zip
)
SELECT Name,phone,address,zip FROM id_test2 ORDER BY P_Key

如果您没有使用identity列,则可以使用row_number进行以下查询

代码语言:javascript
运行
复制
SELECT 
    ROW_NUMBER()OVER(PARTITION BY P_Key ORDER BY P_Key,Name),T.Name,T.phone,T.address,T.zip
FROM
(
    SELECT P_Key,Name,phone,address,zip FROM id_test1 
    UNION ALL
    SELECT P_Key,Name,phone,address,zip FROM id_test2 
)T
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34170776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档