SQL SERVER 中的 insert into select 方法运用错误了!帮忙.....

insertinto表1(num1,num2,num3)selectnum1,num2,num3from表2然后表1(num1,num2,num3)都有红色波浪线报错,但... insert into 表1(num1,num2,num3)
select num1,num2,num3
from 表2
然后 表1 (num1,num2,num3) 都有红色波浪线报错,但是可以运行,这是为什么?
展开
 我来答
wangzhiqing999
2011-08-03 · TA获得超过1.6万个赞
知道大有可为答主
回答量:7048
采纳率:100%
帮助的人:3330万
展开全部
你是不是在 SQL Server Management Studio 2008 运行的呀?

表1 (num1,num2,num3) 都有红色波浪线报错,但是可以运行

原因可能是这个 表1 是你刚才新创建的.
SQL Server Management Studio 启动连接的时候, 应该把当前数据库的 所有的 表/视图/函数/存储过程/等信息. 就加载进入内存了.
所以当你写
SELECT 表2. 的时候, 会自动把 表2 所有的列, 显示出来,让你选择。

但是如果你新建立的表。
由于没有加载到内存里面。
因为 SQL Server Management Studio 不知道(不确定) 到底有没有 表1
内存里面查询不到, 那么你又写了
insert into 表1(num1,num2,num3)

SQL Server Management Studio 怀疑这个表/列 是不存在的, 因此用 红色波浪线报错

但是运行的时候, 是把 SQL 语句,发送到服务器方去执行的。
因此,尽管 怀疑这个 SQL语句,可能不对, 但是还是 发送到服务器那里去。

服务器知道, 有 表1, 而且 表1 有 num1,num2,num3 字段。
因此能够正常的执行。

其实,你只要退出 SQL Server Management Studio
再运行一次 SQL Server Management Studio

应该就没有 红色波浪线报错 了。
Werner_sun
2012-05-14
知道答主
回答量:3
采纳率:0%
帮助的人:4651
展开全部
那是因为你没有指名数据库,默认状态下是master库
你可以在你的语句前加上
USE 数据库名(你所操作的表所在的数据库)
insert into 表1(num1,num2,num3)
select num1,num2,num3
from 表2
就ok
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
psq125584192
2011-08-03 · TA获得超过719个赞
知道答主
回答量:283
采纳率:0%
帮助的人:184万
展开全部
1.INSERT INTO SELECT语句

语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1

要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。示例如下:

INSERT INTO SELECT语句复制表数据
--1.创建测试表
create TABLE Table1
(
a varchar(10),
b varchar(10),
c varchar(10),
CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
(
a ASC
)
) ON [PRIMARY]

create TABLE Table2
(
a varchar(10),
c varchar(10),
d int,
CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED
(
a ASC
)
) ON [PRIMARY]
GO
--2.创建测试数据
Insert into Table1 values('赵','asds','90')
Insert into Table1 values('钱','asds','100')
Insert into Table1 values('孙','asds','80')
Insert into Table1 values('李','asds',null)
GO
select * from Table2

--3.INSERT INTO SELECT语句复制表数据
Insert into Table2(a, c, d) select a,c,5 from Table1
GO

--4.显示更新后的结果
select * from Table2
GO
--5.删除测试表
drop TABLE Table1
drop TABLE Table2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
elva159753
2011-08-03 · 超过17用户采纳过TA的回答
知道答主
回答量:72
采纳率:0%
帮助的人:49.6万
展开全部
报错内容是什么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
198901245631
2015-07-12 · TA获得超过3.5万个赞
知道大有可为答主
回答量:9037
采纳率:92%
帮助的人:1727万
展开全部
”insert into select“ 中的原则就是导入数据的表字段结构必须和查询表字段结构一致才可以的,举例:
sql:insert into tablename2( id) as select id from tablename1 where 条件;
解释:tablename1和tablename2中id字段必须是同一个类型,并且查询表中的id字段长度是不能大于tablename2表中的定义字段长度的。
备注:as是可以省略的。如果多个字段,字段读取和插入顺序必须一致。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式