设为首页 收藏本站
查看: 773|回复: 0

[经验分享] SQL Server 2008 学习笔记【一】 一次性插入多行数据的问题

[复制链接]

尚未签到

发表于 2016-11-7 07:47:25 | 显示全部楼层 |阅读模式
也许这是一个非常简单的问题,本没有必要在此赘述,但是就是这样一个小例子却令我产生很多困惑。
很久以前网上就有消息说,T-SQL行构造器(Row Constructors)用来在INSERT语句中一次性插入多行数据。
例如:
http://www.5120w.com/html/data/SQLServer/content8136.html
http://www.onegreen.net/Article/Database/SQLServer/SQLServer8/15115.html
等等很多地址
或是希赛的书籍《SQL Server 2008 数据库系统开发》中第27
都有类似这样的示例:
CREATE TABLE testTable
(
Column1 nvarchar(10),
Column2 nvarchar(10)
)
GO
INSERT INTO testTable VALUES(
('1','1'),
('2','2')
)
Drop table testTable
然后这样的示例在我电脑上的SQL Server 2008中根本不能正常运行。
Incorrect syntax near ','.
如果想要正常运行的话
示例应该是这样的:
create table tableName
(
onecol varchar(20),
twocol varchar(20)
)
go
insert into
tableName(onecol,twocol) values
('1','aaaa'),
('2','bbbb')
select * from tableName
drop table tableName
/*
onecol twocol
-------------------- --------------------
1 aaaa
2 bbbb
*/

为什么一个如此简单的插入,在网上竟然有两个版本呢?
这两种写法在我的电脑上只有一种能运行又是为什么呢?
首先我们在看一下下面这个网站的介绍:
http://www.5120w.com/html/data/SQLServer/content8136.html

文中曾说:
经过增强后的 INSERT 语句的语法结构如下。
以下为引用的内容:
[WITH<common_table_expression>[,...n]]
INSERT 
  [TOP(expression)[PERCENT]] 
  [INTO] 
  {<object>|rowset_function_limited 
   [WITH(<Table_Hint_Limited>[...n])]
  }
{
  [(column_list)] 
  [<OUTPUTClause>]
  {VALUES(({DEFAULT|NULL|expression}[,...n])[,...n])
  |derived_table 
  |execute_statement 
  |<dml_table_source>
  |DEFAULTVALUES 
  } 
} 
[;]
<object>::=
{ 
  [server_name.database_name.schema_name. 
   |database_name.[schema_name]. 
   |schema_name. 
  ]
    table_or_view_name
}
<dml_table_source>::=
  SELECT<select_list>
  FROM(<dml_statement_with_output_clause>) 
           [AS]table_alias[(column_alias[,...n])]
    [WHERE<search_condition>]
  [OPTION(<query_hint>[,...n])]

然后我们在到微软的官网上去看看:
http://msdn.microsoft.com/zh-cn/library/ms174335.aspx
[ WITH <common_table_expression> [ ,...n ] ]
INSERT
[ TOP ( expression ) [ PERCENT ] ]
[ INTO ]
{ <object> | rowset_function_limited
[ WITH ( <Table_Hint_Limited> [ ...n ] ) ]
}
{
[ ( column_list ) ]
[ <OUTPUT Clause> ]
{ VALUES ( { DEFAULT | NULL | expression } [ ,...n ] ) [ ,...n ]
| derived_table
| execute_statement
| <dml_table_source>
| DEFAULT VALUES
}
}
[; ]

<object> ::=
{
[ server_name . database_name . schema_name .
| database_name .[ schema_name ] .
| schema_name .
]
table_or_view_name
}

<dml_table_source> ::=
SELECT <select_list>
FROM ( <dml_statement_with_output_clause> )
[AS] table_alias [ ( column_alias [ ,...n ] ) ]
[ WHERE <search_condition> ]
[ OPTION ( <query_hint> [ ,...n ] ) ]

我们可以看到红色颜色这行是不一样的。

这是为什么呢?
难道有人在网上自己造的T-SQL语法?还是这是两个不同的版本?不明白!

我的版本号是:
Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)

大家可以自己试试,随便把版本号发一下。

如果另外那种是错误的,建议大家不要到处转载一些不正确的言论或是文章。

@【叶子】http://blog.csdn.net/maco_wang 原创作品,转贴请注明作者和出处,留此信息。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-296736-1-1.html 上篇帖子: 安装Sql Server 2005出现“性能监视器计数器要求”错误解决方法 下篇帖子: 以SQL Server配置Middlegen和extensions产生hbm和POJO
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表