`
wsql
  • 浏览: 11812206 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

SQL Server 2008 学习笔记【一】 一次性插入多行数据的问题

 
阅读更多

也许这是一个非常简单的问题,本没有必要在此赘述,但是就是这样一个小例子却令我产生很多困惑。

很久以前网上就有消息说,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 原创作品,转贴请注明作者和出处,留此信息。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics