表列数大于100,求INSERT写法

v风雪山神庙v 2010-07-25 08:58:02
有一表Main,列数有100多列,设为col1,col2,col3...col100,col101,...
其中col1为主键

现在该表中取一行数据,设为A(val1,val2,val3...val100,val101...)
将A的某几列数据修改后,成为新数据,设为B(newID,val2-modified,val3-modified,....val100,val101...)

现在我使用的语句是


INSERT INTO Main
(
SELECT
newID AS col1,
val2-modified AS col2,
val3-modified AS col3,
col4,
col5,
...
...
col99,
col100,
col101,
...
)


有没有更简洁的写法?
我这样要手工写100多个字段,很费时,还很容易写错
...全文
128 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
claro 2010-07-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xys_777 的回复:]
不想手写,可以用sql server 的管理工具,在表上右键都有编写select、insert、update的脚本
[/Quote]呵呵,一般都这样。
obuntu 2010-07-26
  • 打赏
  • 举报
回复
alt+F1

然后把字段拷出来,加下逗号,不就可以了?
前后不花超过3分钟。
Mr_Nice 2010-07-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 meqxx 的回复:]
有一表Main,列数有100多列,设为col1,col2,col3...col100,col101,...
其中col1为主键

现在该表中取一行数据,设为A(val1,val2,val3...val100,val101...)
将A的某几列数据修改后,成为新数据,设为B(newID,val2-modified,val3-modified,....val100,val101...)

……
[/Quote]

数据修改不是应该在前台程序上实现代码化吗?
如果是后台来更新或者插入,那100个字段,lz或许真得一个一个写了。
  • 打赏
  • 举报
回复
太懒了。
慎用系统表。
操作系统表涉及权限的问题,对安全性有威胁。
永生天地 2010-07-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 meqxx 的回复:]
有一表Main,列数有100多列,设为col1,col2,col3...col100,col101,...
其中col1为主键

现在该表中取一行数据,设为A(val1,val2,val3...val100,val101...)
将A的某几列数据修改后,成为新数据,设为B(newID,val2-modified,val3-modified,....val100,val101...)

……
[/Quote]
不想手写,可以用sql server 的管理工具,在表上右键都有编写select、insert、update的脚本
duanzhi1984 2010-07-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pt1314917 的回复:]
SQL code

declare @sql varchar(8000)
select @sql=isnull(@sql+',','')+name from syscolumns where id=object_id('Main')
print @sql --这里得到的就是所有的列
set @sql='insert into main select '+@sql---这里继续做你要做的操……
[/Quote]
可以用这个方法,当然还有更好的方法:

你可以在EXCEL表中,进行类似的拼接。很简单!

这是我四年的工作经验!你可以发邮件给我,我在excel中跟你拼接。

iamabird0359@163.com




guguda2008 2010-07-25
  • 打赏
  • 举报
回复
这样写:
IF OBJECT_ID('A') IS NOT NULL DROP TABLE A
GO
SELECT * INTO A FROM MAIN
UPDATE A SET COL2=COL2-modified,COL3=COL3-modified
INSERT INTO MAIN
SELECT * FROM A
DROP TABLE A
SQLCenter 2010-07-25
  • 打赏
  • 举报
回复
declare @cols varchar(8000)
select @cols = isnull(@cols+',', '')+name from syscolumns where id = object_id('table_name') order by colid
print @cols
pt1314917 2010-07-25
  • 打赏
  • 举报
回复

declare @sql varchar(8000)
select @sql=isnull(@sql+',','')+name from syscolumns where id=object_id('Main')
print @sql --这里得到的就是所有的列
set @sql='insert into main select '+@sql---这里继续做你要做的操作

水族杰纶 2010-07-25
  • 打赏
  • 举报
回复
要么动态拼接
or
要么点表生成insert语句(2005)
SQLCenter 2010-07-25
  • 打赏
  • 举报
回复
从 syscolumns 里面取列名信息,拼装成SQL。
bancxc 2010-07-25
  • 打赏
  • 举报
回复
木有太好的办法.

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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