阅读更多
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 内。
临时表有两种类型:
本地临时表
以一个井号 (#) 开头的那些表名。只有在创建本地临时表的连接上才能看到这些表。
全局临时表
以两个井号 (##) 开头的那些表名。在所有连接上都能看到全局临时表。如果在创建全局临时表的连接断开前没有显式地除去这些表,那么只要所有其它任务停止引用它们,这些表即被除去。当创建全局临时表的连接断开后,新的任务不能再引用它们。当前的语句一执行完,任务与表之间的关联即被除去;因此通常情况下,只要创建全局临时表的连接断开,全局临时表即被除去。