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

[经验分享] SQL Server 2008 某些新语法

[复制链接]

尚未签到

发表于 2015-6-27 19:56:12 | 显示全部楼层 |阅读模式
  一,如何创建排序表
  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中插入数据,会报 ',' 附近有语法错误。
DSC0000.png

  
  
  
  二,新语句之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
  
  
  
  


DSC0001.png 共享此文 : DSC0002.png DSC0003.png DSC0004.png DSC0005.png DSC0006.png DSC0007.png DSC0008.png DSC0009.jpg DSC00010.png DSC00011.png DSC00012.png DSC00013.png DSC00014.png DSC00015.png DSC00016.png DSC00017.png DSC00018.png DSC00019.png

运维网声明 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-81063-1-1.html 上篇帖子: SQL Server 2008中的代码安全(六):对称密钥加密 下篇帖子: 解读SQL Server 2014可更新列存储索引——存储机制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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