sql server2008数据库导库insert后面跟with语句

sql语句
insert into [lanhai].[dbo].[article](m_id, ArticleTitle, ArticleContent, Articlefrom, AdminName, AddTime, isshow, ip, newsid, mid)
with tm
as(select a.m_id,a.m_name,b.menu_id,b.menu_name,c.c_name from [lanhai].[dbo].[menu] a inner join [lanhaiweb].[dbo].[sys_menu] b on a.m_name=b.menu_name inner join [lanhai].[dbo].[columntype] c on a.m_type=c.id where c.id in(1,2))
select t.m_id,n.news_title,n.news_content,n.news_title2,n.news_sender,n.in_time,1,n.in_ip,n.news_id,n.menu_id from [lanhaiweb].[dbo].[web_info_news] n inner join tm t on n.menu_id=t.menu_id;

消息 156,级别 15,状态 1,第 2 行
关键字 'with' 附近有语法错误。
消息 319,级别 15,状态 1,第 2 行
关键字 'with' 附近有语法错误。如果此语句是公用表表达式、xmlnamespaces 子句或者更改跟踪上下文子句,那么前一个语句必须以分号结尾。

--把Insert语句放到with后面即可

with aaa as{....}
insert into 表
select * from aaa

如有问题可以追问,我当及时回答.

希望能帮到你

追问

放了后面也不行,还是报错,临时表tm有内容正确

消息 515,级别 16,状态 2,第 1 行
不能将值 NULL 插入列 'ArticleId',表 'lanhai.dbo.article';列不允许有 Null 值。INSERT 失败。
语句已终止。

追答

报错信息:不能将值 NULL 插入列 'ArticleId'? 已经不是那个错误了

放在上面是可以的,只是你的article 表 列ArticleId 此列不能为空 报错信息.

我看你的代码article 表 没有插入ArticleId列.如不是自增及标识需加上。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-29
with前面的语句加分号结尾
第2个回答  2013-08-29
--楼主 你少个分号 我帮你改下吧 with 前面的语句后面必须有分号的
--有什么疑问可以随时找我 希望解决了楼主的问题
insert into [lanhai].[dbo].[article](m_id, ArticleTitle, ArticleContent, Articlefrom, AdminName, AddTime, isshow, ip, newsid, mid);
with tm
as(select a.m_id,a.m_name,b.menu_id,b.menu_name,c.c_name from [lanhai].[dbo].[menu] a inner join [lanhaiweb].[dbo].[sys_menu] b on a.m_name=b.menu_name inner join [lanhai].[dbo].[columntype] c on a.m_type=c.id where c.id in(1,2))
select t.m_id,n.news_title,n.news_content,n.news_title2,n.news_sender,n.in_time,1,n.in_ip,n.news_id,n.menu_id from [lanhaiweb].[dbo].[web_info_news] n inner join tm t on n.menu_id=t.menu_id;