sql基础_1_日期_分页_字符串_建表_join_聚集


Declare @DayOne DateTime
--按天,今天
SET @DayOne = DATEADD (dd, DATEDIFF (dd, 0, getdate ()), 0)

--按周,周的第一天
SET @DayOne = DATEADD (wk, DATEDIFF (wk, 0, getdate ()), 0)

--按月,月的第一天
SET @DayOne = DATEADD (mm, DATEDIFF (mm, 0, getdate ()), 0)

--连接删除:
Delete a
From tableA a
Left Join TableB b
On a.XXX = b.XXX
Where a.YYY='yyy'

--连接更新:
UPDATE a
SET    a.password = 1
FROM   sys_user a

--分页查询
SELECT *  
  FROM (  
     SELECT ROW_NUMBER () OVER (ORDER BY a.CardCode) AS rownum,  
               a.CompanyID,  
               a.CustomerID,  
               a.CustomerName  
          FROM vwCRM_Bas_CardCustomerInfo a  
         WHERE a.Tel = '33' AND a.CustomerName = '包子'  
   ) AS data  
 WHERE data.rownum BETWEEN '1' AND '10';  



--字符串处理
right(str,length) 取右边length长度的子字符串
ltrim() 函数从字符串左侧删除空格或其他预定义字符, 还可以将数字转换成字符。

--由'hk0000000182'  --> 0000000183
declare @LogID varchar(20)
declare @maxNum int
set @LogID = 'hk0000000182'
Select @maxNum = right(@LogID,10)
select @maxNum
select right('0000000000'+ltrim(@maxNum+1),10)

--注意以下两句的区别
select  right('00000' + ltrim( '003'+ 3), 5) Sequence --> 00006
select  right('00000' + ( '003'+ 3), 5) Sequence  --> 6

--根据行号生成序号 : 00001, 00002 等
Right('00000' + ltrim(ROW_NUMBER() OVER (ORDER BY WaveBillNo)), 5) Sequence,


拼接列值  
Select ID + ',' From UserInfo FOR XML PATH('')  


建表例1:(自增,多主键,默认值)    
CREATE TABLE CSM_OTH_VipBabyInfo  
(  
   CompanyID   INT IDENTITY (1, 1),  
   NewVipID    VARCHAR (20),  
   OldVipID    VARCHAR (20),  
   ModifyDTM   DATETIME DEFAULT getdate () NOT NULL, 
   CONSTRAINT pk PRIMARY KEY (CompanyID, NewVipID, OldVipID) 
)  

建表例2:
IF OBJECT_ID ('SD_Inv_BillSign', 'U') IS NULL
   BEGIN
      CREATE TABLE SD_Inv_BillSign
      (
         [SignID]        INT IDENTITY (1, 1) NOT NULL,
         [SignTime]      DATETIME DEFAULT GetDate () NOT NULL,
         [CompanyID]     VARCHAR (99) NOT NULL,
         [BillNo]        VARCHAR (99) NOT NULL,
         [BillTypeID]    VARCHAR (99) NOT NULL,
         [ShopID]        VARCHAR (99) NULL,
         [StockID]       VARCHAR (99) NULL,
         [BoxCount]      INT NULL,
         [Operator]      VARCHAR (99) NULL,
         [PersonnelID]   VARCHAR (99) NULL,
         [Remark]        NVARCHAR (2000) NULL
      );

      --添加聚集索引
      CREATE CLUSTERED INDEX IDX_SD_Inv_BillSign_SignTime
         ON SD_Inv_BillSign (SignTime);

      --添加非聚集索引
      CREATE NONCLUSTERED INDEX IDX_SD_Inv_BillSign_BillNo
         ON SD_Inv_BillSign (CompanyID, BillNo, BillTypeID);

--添加主键
ALTER TABLE SD_Inv_BillSign ADD CONSTRAINT PK_SD_Inv_BillSign   PRIMARY KEY (SignID);
   END
GO
  
  
带输入输出的存储过程的执行示例:  
declare @RetVal int  
exec spCSM_ChangeVipCard 'hk','a',@RetVal output  
select @RetVal  

DECLARE @MaxBatchNo INT = 0;
EXEC spCRM_GetMaxNum @ComCode = @CompanyID, @MaxNum = @MaxBatchNo output
SELECT @MaxBatchNo

1.inner join on  内部连接 两表都满足的组合
2.full outer 全连 两表相同的组合在一起,A表有,B表没有的数据(显示为null),同样B表有,A表没有的显示为(null)
3.A表 left join  B表 左连,以A表为基础,A表的全部数据,B表有的组合。没有的为null
4.A表 right join B表 右连,以B表为基础,B表的全部数据,A表的有的组合。没有的为null
5.cross join : 笛卡尔积



DML(data manipulation language):数据操作语言
包括命令:SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言。 

DDL(data definition language):数据定义语言
通常是数据库管理系统的一部分,用于定义数据库的所有特性和属性,尤其是行布局、列定义、键列(有时是选键方法)、文件位置和存储策略。 
包括命令:DROP,CREATE,ALTER,GRANT,REVOKE, TRUNCATE



SQL Server 支持临时表。临时表就是那些名称以井号 (#) 开头的表。如果当用户断开连接时没有除去临时表,SQL Server 将自动除去临时表。临时表不存储在当前数据库内,而是存储在系统数据库 tempdb 内。  
  
临时表有两种类型:    
  
本地临时表    
以一个井号 (#) 开头的那些表名。只有在创建本地临时表的连接上才能看到这些表。  
  
全局临时表    
以两个井号 (##) 开头的那些表名。在所有连接上都能看到全局临时表。如果在创建全局临时表的连接断开前没有显式地除去这些表,那么只要所有其它任务停止引用它们,这些表即被除去。当创建全局临时表的连接断开后,新的任务不能再引用它们。当前的语句一执行完,任务与表之间的关联即被除去;因此通常情况下,只要创建全局临时表的连接断开,全局临时表即被除去。  

猜你喜欢

转载自zheyiw.iteye.com/blog/1899668
今日推荐