SQLServer2008向表中插入数据

Tobin_han 2016-01-19 02:34:24
在SQLServer 2008中有一个表table.

id name age sex
1 张三 20 男
2 李四 23 男

我现在想插入赋值id为1的数据,并更新name后保存。操作结果为:(id不是自增长的)

id name age sex
1 张三 20 男
2 李四 23 男
3 王五 20 男


请教大神帮忙看看是否能够解决该问题。万分感谢!
...全文
439 15 打赏 收藏 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tobin_han 2016-01-26
  • 打赏
  • 举报
回复
当然可以, 不过并不建议。 GUID的效率是非常低的——非常容易产生索引碎片。 一般情况下用标识列, 比较特殊的可以用程序来生成。 主键的类型最好用 int, bigint 等“简单”类型。[/quote] 谢谢
吉普赛的歌 2016-01-22
  • 打赏
  • 举报
回复
引用 13 楼 Tobin_han 的回复:
我想要id用NEWID()生成可以吗?
当然可以, 不过并不建议。 GUID的效率是非常低的——非常容易产生索引碎片。 一般情况下用标识列, 比较特殊的可以用程序来生成。 主键的类型最好用 int, bigint 等“简单”类型。
Tobin_han 2016-01-22
  • 打赏
  • 举报
回复
引用 12 楼 yenange 的回复:
[quote=引用 11 楼 Tobin_han 的回复:] [quote=引用 10 楼 yenange 的回复:]
IF OBJECT_ID('dbo.test','U') IS NOT NULL
	DROP TABLE dbo.test
GO
CREATE TABLE dbo.test(
	id INT PRIMARY KEY,
	[name] NVARCHAR(20),
	[age] INT,
	sex NCHAR(1)	
)
GO
SET NOCOUNT ON
INSERT INTO dbo.test (id,[name],age,sex) VALUES(1,N'张三',20,N'男')
INSERT INTO dbo.test (id,[name],age,sex) VALUES(2,N'李四',23,N'男')
SELECT * FROM dbo.test
/*
id	name	age	sex
1	张三	20	男
2	李四	23	男
*/
INSERT INTO dbo.test (id,[name],age,sex)
SELECT ISNULL((SELECT MAX(id) FROM dbo.test),0)+1 AS id
	   ,N'王五'
	   ,age
	   ,sex
FROM dbo.test WHERE id=1

SELECT * FROM dbo.test
/*
id	name	age	sex
1	张三	20	男
2	李四	23	男
3	王五	20	男
*/
谢谢,要的就是这个效果,再问一句请问如果id不是自增长的怎么办? 分先给您。 [/quote] 现在就是id没有自增长啊。 如果是自增长的, 改成:
INSERT INTO dbo.test ([name],age,sex)
SELECT 
	   ,N'王五'
	   ,age
	   ,sex
FROM dbo.test WHERE id=1
[/quote] 我想要id用NEWID()生成可以吗?
Tobin_han 2016-01-21
  • 打赏
  • 举报
回复
引用 10 楼 yenange 的回复:
IF OBJECT_ID('dbo.test','U') IS NOT NULL
	DROP TABLE dbo.test
GO
CREATE TABLE dbo.test(
	id INT PRIMARY KEY,
	[name] NVARCHAR(20),
	[age] INT,
	sex NCHAR(1)	
)
GO
SET NOCOUNT ON
INSERT INTO dbo.test (id,[name],age,sex) VALUES(1,N'张三',20,N'男')
INSERT INTO dbo.test (id,[name],age,sex) VALUES(2,N'李四',23,N'男')
SELECT * FROM dbo.test
/*
id	name	age	sex
1	张三	20	男
2	李四	23	男
*/
INSERT INTO dbo.test (id,[name],age,sex)
SELECT ISNULL((SELECT MAX(id) FROM dbo.test),0)+1 AS id
	   ,N'王五'
	   ,age
	   ,sex
FROM dbo.test WHERE id=1

SELECT * FROM dbo.test
/*
id	name	age	sex
1	张三	20	男
2	李四	23	男
3	王五	20	男
*/
谢谢,要的就是这个效果,再问一句请问如果id不是自增长的怎么办? 分先给您。
吉普赛的歌 2016-01-21
  • 打赏
  • 举报
回复
IF OBJECT_ID('dbo.test','U') IS NOT NULL
	DROP TABLE dbo.test
GO
CREATE TABLE dbo.test(
	id INT PRIMARY KEY,
	[name] NVARCHAR(20),
	[age] INT,
	sex NCHAR(1)	
)
GO
SET NOCOUNT ON
INSERT INTO dbo.test (id,[name],age,sex) VALUES(1,N'张三',20,N'男')
INSERT INTO dbo.test (id,[name],age,sex) VALUES(2,N'李四',23,N'男')
SELECT * FROM dbo.test
/*
id	name	age	sex
1	张三	20	男
2	李四	23	男
*/
INSERT INTO dbo.test (id,[name],age,sex)
SELECT ISNULL((SELECT MAX(id) FROM dbo.test),0)+1 AS id
	   ,N'王五'
	   ,age
	   ,sex
FROM dbo.test WHERE id=1

SELECT * FROM dbo.test
/*
id	name	age	sex
1	张三	20	男
2	李四	23	男
3	王五	20	男
*/
吉普赛的歌 2016-01-21
  • 打赏
  • 举报
回复
引用 11 楼 Tobin_han 的回复:
[quote=引用 10 楼 yenange 的回复:]
IF OBJECT_ID('dbo.test','U') IS NOT NULL
	DROP TABLE dbo.test
GO
CREATE TABLE dbo.test(
	id INT PRIMARY KEY,
	[name] NVARCHAR(20),
	[age] INT,
	sex NCHAR(1)	
)
GO
SET NOCOUNT ON
INSERT INTO dbo.test (id,[name],age,sex) VALUES(1,N'张三',20,N'男')
INSERT INTO dbo.test (id,[name],age,sex) VALUES(2,N'李四',23,N'男')
SELECT * FROM dbo.test
/*
id	name	age	sex
1	张三	20	男
2	李四	23	男
*/
INSERT INTO dbo.test (id,[name],age,sex)
SELECT ISNULL((SELECT MAX(id) FROM dbo.test),0)+1 AS id
	   ,N'王五'
	   ,age
	   ,sex
FROM dbo.test WHERE id=1

SELECT * FROM dbo.test
/*
id	name	age	sex
1	张三	20	男
2	李四	23	男
3	王五	20	男
*/
谢谢,要的就是这个效果,再问一句请问如果id不是自增长的怎么办? 分先给您。 [/quote] 现在就是id没有自增长啊。 如果是自增长的, 改成:
INSERT INTO dbo.test ([name],age,sex)
SELECT 
	   ,N'王五'
	   ,age
	   ,sex
FROM dbo.test WHERE id=1
threenewbee 2016-01-20
  • 打赏
  • 举报
回复
数据库不要存id这一列。而是用rowid在查询的时候生成。
秋的红果实 2016-01-20
  • 打赏
  • 举报
回复
你新增加一条记录不就行了,干嘛那么复杂 比如:你想把“1 张三 20 男”这条复制,添加到表,再修改姓名为王五==添加“1 王五 20 男” 一条就完了
Tobin_han 2016-01-19
  • 打赏
  • 举报
回复
引用 6 楼 From_TaiWan 的回复:
插入一行,其他行的id都增加1?
其他行id不变,id不是自增长的。 我其实就是想复制表里的第一条数据,然后改一下name值,再插入到表中。
秋的红果实 2016-01-19
  • 打赏
  • 举报
回复
插入一行,其他行的id都增加1?
Tobin_han 2016-01-19
  • 打赏
  • 举报
回复
就像这样的 INSERT INTO Table SELECT * FROM Table WHERE ID='1'
Tobin_han 2016-01-19
  • 打赏
  • 举报
回复
好吧,是我不对,表达的不清楚。 我的意思是赋值表中的某一行数据,然后再将赋值的数据插入到表中。
快乐起航2020 2016-01-19
  • 打赏
  • 举报
回复
普通的插入是很简单的,更改也只是多写个sql语句
xdashewan 2016-01-19
  • 打赏
  • 举报
回复
你举得例子和你文字表述自相矛盾,“我现在想插入赋值id为1的数据,并更新name后保存”,你两条id为1的数据,从头到尾所有字段一模一样
快乐起航2020 2016-01-19
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
你举得例子和你文字表述自相矛盾,“我现在想插入赋值id为1的数据,并更新name后保存”,你两条id为1的数据,从头到尾所有字段一模一样
搞不懂他想表达什么

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧