一,如何创建排序表

1.T-SQL创建一个排序表。

CREATE TABLE OrderTable(
      [OrderId]    [int] IDENTITY(1,1) NOT NULL,
      [CustomerId] [int] NOT NULL,
      [OrderTotal] [decimal](18, 0) NOT NULL
)

2.T-SQL插入数据到排序表。

Insert into OrderTable (CustomerId, OrderTotal)
Values      (1,90),
            (2,180),
            (6,540)
3.查看结果,如果是在MSSQL2005中插入数据,会报 ',' 附近有语法错误。
SQL Server 2008 某些新语法 
            

 

二,新语句之MERGE,请参考:http://tech.it168.com/db/2007-07-24/200707242111781.shtml

据IT168技术文档上是说当要对2张表进行信息同步时(合并2张表),有三步操作要进行。首先要处理任何需要插入目标数据表的新行。其次是处理需要更新的已存在的行。最后要删除不再使用的旧行。 一个模板如下:

CREATE TABLE [dbo].[CustomerTable](
    [CustomerId] [int] IDENTITY(1,1) NOT NULL,
    [CustomerTotal] [decimal](18, 0) NULL,
    [CustomerName] [varchar](50) NULL
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[CustomerTable] ADD  DEFAULT ((0)) FOR [CustomerTotal]
GO

ALTER TABLE [dbo].[CustomerTable] ADD  DEFAULT ('') FOR [CustomerName]
GO

现在我们使用MERGE同步数据:

  Merge CustomerTable
  Using ( Select CustomerId, OrderTotal From OrderTable ) As OrderSrc (CustId, Amount)
  On CustomerTable.CustomerId = OrderSrc.CustId
  When MATCHED AND OrderSrc.CustId = 0 THEN 
      DELETE
  When Matched Then
      Update Set CustomerTotal = CustomerTotal + OrderSrc.Amount
  When Not Matched Then
      Insert (CustomerName,CustomerTotal) values (GetDate(), OrderSrc.Amount);

我也没理解,,还是说说目前对次语句的理解:

目标表(需要作用的表)是CustomerTable,源表(参照表)是OrderTable

1.When Matched Then  表示 当2张表有一些共同点,就是说CustomerTable.CustomerId = OrderTable.CustomerId 的时候,OrderTable。CustomerTotal 中的值是 更新到CustomerTable。CustomerTotal 。 其实IT168 也提过,,MERGE就是针对join的。

2.When Not Matched Then  表示 当 OrderTable 中的记录在 CustomerTable 中没有,,就添加新行。

3.When MATCHED AND OrderSrc.CustId = 0 THEN 其实应该是 When Source Not Matched Then, 我不知道为什么 When Source Not Matched Then 会报错,,因此改成了

When MATCHED AND OrderSrc.CustId = 0 THEN, 这个逻辑其实因该是要表示当源表,,也就是OrderTable中一条数据都没有的话,就DELETE CustomerTable….,我这里没写出来这个逻辑。

MERGE虽然强大,但会在目标表中产生无关的数据…..

 

三,内置初始化变量

以前的是:

DECLARE @i int 
SET @i = 10
现在是:
DECLARE @i int = 10

 

 

四,C#数学语法
现在是:
--DECLARE @i int 
--SET @i = 10
SET @i += 10

 

五,微软新引进的 表值参数 Table-Value-Parameters (TVP)

我看到微软ADO的博客写了一个例子:

Create Type Songs_TableType as Table
(Title nvarchar(120) not null,
TrackNumber int)

I can now use this type in a stored procedure to pass a table as a parameter. The following T-Sql shows how to define a stored procedure that takes this type as a parameter. Note that I have skipped error handling for brevity.

create procedure AddSongs(
 @ArtistName nvarchar(120), 
 @AlbumName nvarchar(120), 
 @Songs Songs_TableType READONLY)
as
begin
 -- Add the Artist
 Declare @ArtistID int
 insert into Artists values (@ArtistName)
 select @ArtistID = SCOPE_IDENTITY()

 -- Add the Album
 Declare @AlbumID int
 insert into Albums values (@AlbumName, @ArtistID)
 select @AlbumID = SCOPE_IDENTITY()

 -- Insert songs
 insert into Songs 
 select title, trackNumber, @AlbumID, @ArtistID
 from @Songs
end

但是看得不是很明白,下面是我的简写:

CREATE TYPE MyTableType AS TABLE (CustomerId int, OrderTotal int) 

DECLARE @myTableType  MyTableType  INSERT @myTableType SELECT 6, 7 

Insert into OrderTable  Select CustomerId, OrderTotal from @myTableType

 

完了,另外,有兴趣的可以看看MSDN的网站http://msdn.microsoft.com/zh-cn/library/ms144275.aspx

 

SQL Server 2008 某些新语法 共享此文 : SQL Server 2008 某些新语法 SQL Server 2008 某些新语法 SQL Server 2008 某些新语法 SQL Server 2008 某些新语法 SQL Server 2008 某些新语法 SQL Server 2008 某些新语法 SQL Server 2008 某些新语法 SQL Server 2008 某些新语法 SQL Server 2008 某些新语法 SQL Server 2008 某些新语法 SQL Server 2008 某些新语法 SQL Server 2008 某些新语法 SQL Server 2008 某些新语法 SQL Server 2008 某些新语法 SQL Server 2008 某些新语法 SQL Server 2008 某些新语法 SQL Server 2008 某些新语法 SQL Server 2008 某些新语法 SQL Server 2008 某些新语法

相关文章: