Awesome SQL Codes

SQL

SQLCode


AttachDatabase.sql

--Unable to open the physical file "E:\SQLData\Data\AttachStudentDB.mdf". Operating system error 32: "32(The process cannot access the file because it is being used by another process.)".
CREATE DATABASE TestAttach
	ON (FILENAME = 'E:\SQLData\Data\AttachStudentDB.mdf'),
	(FILENAME = 'E:\SQLData\Data\AttachStudentDB_log.ldf')
	FOR ATTACH

CREATE DATABASE TestAttach
	ON (FILENAME = 'E:\SQLData\Data\TestAttach.mdf')
	FOR ATTACH

Backup2.sql

--Create new table in database TestDB
USE TestDB
GO
CREATE TABLE TestTable
(
	ID INT IDENTITY PRIMARY KEY,
	TESTNAME VARCHAR(32)
)
GO
INSERT INTO TestTable
VALUES ('FIRST TEST')

--Create full back up for TestDB
BACKUP DATABASE TestDB TO DISK = 'E:\SQLData\Backup\TestDB.bak' WITH INIT

--Create back up differential for TestDB
BACKUP DATABASE TestDB TO DISK = 'E:\SQLData\Backup\TestDB_Diff.bak' WITH DIFFERENTIAL

--Restore database to NewBackUp database
USE master
GO
RESTORE DATABASE NewBackUp FROM DISK = 'E:\SQLData\Backup\TestDB.bak' WITH REPLACE

CreateConstraintForiegnKey.sql

CREATE DATABASE StudentDB
GO
USE StudentDB
GO 
CREATE TABLE StudentDB.dbo.Class (
	ClassID INT PRIMARY KEY NOT NULL,
	ClassName VARCHAR(32)
)
GO
CREATE TABLE StudentDB.dbo.Student(
	StudentID INT PRIMARY KEY NOT NULL,
	Name VARCHAR(64),
	Address VARCHAR(32),
	ClassID INT,
	CONSTRAINT FK_ClassID FOREIGN KEY (ClassID) REFERENCES Class(ClassID)
)
GO
SELECT * FROM StudentDB.dbo.Class
GO
SELECT * FROM StudentDB.dbo.Student
--Luon phai insert bang Foreign key truoc
INSERT INTO Class VALUES(1,'12A1')
INSERT INTO Class VALUES(2,'12A2')
INSERT INTO Class VALUES(3,'12Y')


--Neu thong tin foreign key khong co trong bang reference bang se bi loi
INSERT INTO Student
VALUES(
1,'PHAM DINH KHANH','HOANG MAI',1
)

INSERT INTO Student
VALUES(
2,'LE THANH CONG','CAU GIAY',3)

INSERT INTO Student
VALUES(
3,'DANG NGHIA HUNG','MINH KHAI',2
)

INSERT INTO Student
VALUES(
4,'NGUYEN DUY TUNG','BA DINH',2
)

CreateDateBetweenRange.sql

USE KHANH_DB
DECLARE @dates TABLE (Dt datetime)
DECLARE @dateFrom datetime
DECLARE @dateTo datetime

SET @dateFrom = '2015-01-01'
SET @dateTo = '2017-12-31'

WHILE (@dateFrom < @dateTo)
BEGIN
	INSERT INTO @dates
	SELECT @dateFrom
	SET @dateFrom = DATEADD(DAY,1,@dateFrom)
END

SELECT * FROM @dates

CreateLExcelLink.sql

DECLARE @RC int

DECLARE @server     nvarchar(128)
DECLARE @srvproduct nvarchar(128)
DECLARE @provider   nvarchar(128)
DECLARE @datasrc    nvarchar(4000)
DECLARE @location   nvarchar(4000)
DECLARE @provstr    nvarchar(4000)
DECLARE @catalog    nvarchar(128)

-- Set parameter values
SET @server =     'EXCELLINK'
SET @srvproduct = 'Excel'
SET @provider =   'Microsoft.ACE.OLEDB.12.0'
SET @datasrc =    'E:\SQLData\Data\WorkOrderOpenRowSet.xlsx'
SET @provstr =    'Excel 12.0'

EXEC @RC = [master].[dbo].[sp_addlinkedserver] @server, @srvproduct, @provider,
@datasrc, @location, @provstr, @catalog

ExcecImportToSQLFromTextUsingR.sql

EXEC TestDB.dbo.ImportTextFile 'E:\SQLData\Data\ConvertTextFile.txt','TestDB.dbo.WorkOrderImportFromTextFileUseR','\t','\n',2

ExecRcodeFromSQL.sql

USE master
GO
sp_configure 'external scripts enabled', 1;  
RECONFIGURE WITH OVERRIDE;  

EXECUTE sp_execute_external_script
      @language = N'R'
    , @script = N'
        library(utils);
        mymemory <- memory.limit();
        OutputDataSet <- as.data.frame(mymemory);'
    , @input_data_1 = N' ;'
WITH RESULT SETS (([Col1] int not null));

FunctionConvertDateCrossApply.sql

USE TestDB
GO
CREATE FUNCTION dbo.ConvertDate (
	@StringDate VARCHAR(32)
) 
RETURNS @TableResult TABLE(
	DateConverted VARCHAR(8)
)
AS
BEGIN
DECLARE @B VARCHAR(32), @Date VARCHAR(32), 
	@Month VARCHAR(32), @Year VARCHAR(32),
	@TempDate VARCHAR(32), @TempMonth VARCHAR(32)
	SET @B = LEFT(@StringDate,LEN(@StringDate)-6)
	SET @TempDate = LEFT(@StringDate,CHARINDEX('/',@B,1)-1)
	SET @Date = CASE WHEN LEN(@TempDate) = 2 THEN @TempDate
					 ELSE '0'+@TempDate END
	SET @Year= RIGHT(@B,4)
	SET @TempMonth = SUBSTRING(@B,LEN(@TempDate)+2,LEN(@B)-LEN(@Year)-LEN(@TempDate)-2)
	SET @Month = CASE WHEN LEN(@TempMonth) = 2 THEN @TempMonth
					  ELSE '0'+@TempMonth END
	INSERT INTO @TableResult
	SELECT @Year+@Month+@Date
	RETURN
END

FunctionReturnDateInMonth.sql

CREATE FUNCTION dbo.DateInMonth(@Date VARCHAR(32))
RETURNS INT
WITH EXECUTE AS CALLER
AS
BEGIN
	DECLARE @StartDateMonth VARCHAR(32)
	DECLARE @Day INT
	SET @StartDateMonth = LEFT(@Date,6) + '01'
	SET @Day = DATEDIFF(DAY,@StartDateMonth, @Date)
	RETURN(@Day)
END
--SELECT dbo.DateInMonth('20170131')

FunctionReturnTable.sql

USE TestDB
GO
--DROP FUNCTION dbo.AverageOrder
CREATE FUNCTION dbo.AverageOrder(
	@ProductID VARCHAR(32),
	@MinOrderQty INT
) 
RETURNS @OrderTable TABLE (
	ProductID VARCHAR(32),
	AverageOrderQty INT
)
AS 
BEGIN
	WITH A AS (
		SELECT ProductID,AVG(OrderQty) AverageOrderQty FROM TestDB.dbo.WorkOrder
		WHERE ProductID = @ProductID AND OrderQty >= @MinOrderQty
		GROUP BY ProductID
	)
	INSERT INTO @OrderTable
	SELECT * FROM A
	RETURN
END

FunctionReturnTableSegment.sql

USE TestDB
GO
CREATE FUNCTION dbo.Segment(
	@Value INT,	
	@LowValue INT,
	@MediumValue INT,
	@HightValue INT
) 
RETURNS @SegmentTable TABLE(
	Segment VARCHAR(32)
)
AS
BEGIN
	DECLARE @Segment VARCHAR(32)
	SET @Segment = CASE WHEN @Value <= @LowValue THEN 'SILVER'
						WHEN @Value <= @MediumValue THEN 'GOLD'
						WHEN @Value <= @HightValue THEN 'TITAN'
						ELSE 'PLATINUM' END
	INSERT INTO @SegmentTable VALUES (@Segment)
	RETURN
END
--SELECT * FROM TestDB.dbo.Segment(49,10,50,100)
--SELECT A.ProductID,A.OrderQty,B.* FROM TestDB.dbo.WorkOrder A
--	CROSS APPLY
--	TestDB.dbo.Segment(A.OrderQty,10,20,100) B

FunctionReturnVariable.sql

--SELECT * FROM TestDB..WorkOrder
--ALTER TABLE TestDB..WorkOrder
--ADD SegmentOrder VARCHAR(32)


CREATE FUNCTION dbo.SegmentOrder(@OrderQty INT,
	@iSILVER INT,
	@iGOLD INT,
	@iTITAN INT
)
RETURNS VARCHAR(32) 
AS
BEGIN
	DECLARE @SegmentOrder VARCHAR(32)
	SET @SegmentOrder = CASE WHEN @OrderQty < @iSILVER THEN 'SILVER'
							WHEN @OrderQty < @iGOLD THEN 'GOLD'
							WHEN @OrderQty < @iTITAN THEN 'TITAN'
							ELSE 'PLATINUM' END
	RETURN(@SegmentOrder)
END

--SELECT dbo.SegmentOrder(100,10,20,100)
--UPDATE WorkOrder
--SET SegmentOrder = dbo.SegmentOrder(OrderQty,10,20,100)
--SELECT * FROM TestDB..WorkOrder

FunctionReturnWeek.sql

CREATE FUNCTION dbo.ISOweek (@DATE datetime)  
RETURNS int  
WITH EXECUTE AS CALLER  
AS  
BEGIN  
     DECLARE @ISOweek int;  
     SET @ISOweek= DATEPART(wk,@DATE)+1  
          -DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104');  
--Special cases: Jan 1-3 may belong to the previous year  
     IF (@ISOweek=0)   
          SET @ISOweek=dbo.ISOweek(CAST(DATEPART(yy,@DATE)-1   
               AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1;  
--Special case: Dec 29-31 may belong to the next year  
     IF ((DATEPART(mm,@DATE)=12) AND   
          ((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28))  
          SET @ISOweek=1;  
     RETURN(@ISOweek);  
END;  
--GO  
--SET DATEFIRST 1;  
--SELECT dbo.ISOweek(CONVERT(DATETIME,'12/26/2004',101)) AS 'ISO Week';  

ImportBCP.sql

select * from TestDB.dbo.ImportBCP

---bcp.exe TestDB.dbo.ImportBCP in "E:\SQLData\Data\WorkOrder.csv" -T -c -t
---C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn

ImportFromOpenRowSet.sql

USE master
GO
sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE; 
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParam', 1

--Điều kiện: phải cài Access database Engine 64 bit
USE TestDB;
GO
TRUNCATE TABLE WorkOrderOpenRowSet
INSERT INTO WorkOrderOpenRowSet
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
    'Excel 8.0; Database=E:\SQLData\Data\WorkOrderOpenRowSet.xlsx', [Sheet1$]);
GO

--SELECT * FROM WorkOrderOpenRowSet

Index.sql

--Tao index trong bang TransactionTest theo NGAY
USE PartTest
CREATE TABLE TransactionTest(
	ID INT IDENTITY,
	NGAY DATETIME,
	SANPHAM_ID INT
) ON PScheme_NGD(NGAY)
GO
CREATE INDEX CI_SANPHAM_ID ON dbo.TransactionTest(SANPHAM_ID)

--Mac dinh INDEX se duoc phan doan theo INDEX cua bang
--Kiem tra xem index duoc phan doan
SELECT i.name AS IndexName, i.type_desc, ps.name PartitionName, ps.data_space_id 
FROM SYS.indexes i
JOIN SYS.partition_schemes ps
	ON ps.data_space_id = i.data_space_id
		WHERE i.name = 'CI_SANPHAM_ID'

	

--code để liệt kê các cột chứa trong index
SELECT ind.name AS Index_Name, col.name AS Column_Name
FROM SYS.indexes ind 
INNER JOIN SYS.index_columns ic 
    ON  ind.OBJECT_ID = ic.OBJECT_ID and ind.index_id = ic.index_id 
INNER JOIN SYS.COLUMNS col 
    ON ic.OBJECT_ID = col.OBJECT_ID and ic.column_id = col.column_id 
WHERE ind.name = 'CI_SANPHAM_ID'	


--Tao unique index 
CREATE UNIQUE INDEX UI_SANPHAM_ID ON TransactionTest(SANPHAM_ID)	
--unique index nay phai la tap con cua index key.
CREATE UNIQUE INDEX UI_SANPHAM_ID ON TransactionTest(SANPHAM_ID) ON [PRIMARY]
--chi dinh index tren primary group

Inline&MultipleStatementFunction.sql

--Ham kieu bang tra ve 1 bang 
--dang 1:in-line: chi co duy nhat mot cau lenh select duoc gui toi Server
USE AdventureWorks
GO
CREATE FUNCTION dbo.fn_ProductInfoByModelId(@p INT) 
RETURNS TABLE AS
RETURN
		SELECT P.ProductID, P.Name, P.ProductNumber
		FROM Production.Product P
		WHERE P.ProductModelID = @p
GO
--goi ham truc tiep
SELECT * FROM dbo.fn_ProductInfoByModelId(5)

--dang 2:multiple-statement nhieu hon 1 lenh duoc gui toi server
CREATE FUNCTION dbo.fnCSVStr2Table(@CSVStr VARCHAR(8000))
RETURNS @Tbl TABLE(ValueColumn VARCHAR(1000))
AS
BEGIN 
	DECLARE @SubStr VARCHAR(100)
	DECLARE @i INT
	SET @i = CHARINDEX(',',@CSVStr, 0)
	WHILE @i > 0
	BEGIN
		SET @SubStr = LTRIM(RTRIM(LEFT(@CSVStr,@i-1)))
		INSERT INTO @Tbl
		SELECT @SubStr
		SET @CSVStr = SUBSTRING(@CSVStr, @i+1,8000)
		SET @i = CHARINDEX(',',@CSVStr,0)
	END
	--khi khong tim thay dau phay tri se co @i = 0, insert phan substring duoc luu trong @CSVStr
	INSERT INTO @Tbl
	SELECT LTRIM(RTRIM(@CSVStr))
	RETURN
END


SELECT * FROM fnCSVStr2Table('HANOI, HAIPHONG, THANH HOA')

--Ham multi-statement se phai khai bao dinh dang cua bang va phan than chuong trinh gom cac ham lenh thao tac du lieu va ket thuc
--la ham return vi ket qua da duoc khai bao trong @Tbl. Trai nguoc voi in-line khong can khai bao bang va return la mot cau lenh select

--Xem phuong an thuc thi
SELECT TH.*,P.Name
FROM Production.TransactionHistory TH
JOIN dbo.fn_ProductInfoByModelId(5) P ON TH.ProductID = P.ProductID

--chuyen ham fn_ProductInfoByModelId ve multi-statement
DROP FUNCTION dbo.fn_ProductInfoByModelId

CREATE FUNCTION dbo.fn_ProductInfoByModelID_MSTV(@p INT) 
RETURNS @t TABLE(ProductID INT, Name NVARCHAR(50), ProductNumber NVARCHAR(25))
AS
BEGIN
	INSERT INTO @t
	SELECT P.ProductID, P.Name, P.ProductNumber
	FROM Production.Product P 
	WHERE P.ProductModelID = @p
 
	RETURN
END


SELECT *
FROM Production.TransactionHistory TH
JOIN dbo.fn_ProductInfoByModelID_MSTV(5) P ON TH.ProductID = P.ProductID

PartitionTable.sql

--Tao database va file group
CREATE DATABASE PartTest
GO
USE PartTest
GO
--Tao filegroup
ALTER DATABASE PartTest ADD FILEGROUP FG1
ALTER DATABASE PartTest ADD FILEGROUP FG2
ALTER DATABASE PartTest ADD FILEGROUP FG3

--Them data vao moi File group
ALTER DATABASE PartTest ADD FILE (NAME = N'FG1', FILENAME = N'E:\SQLData\Data\PartTest\FY2015.ndf') TO FILEGROUP FG1
ALTER DATABASE PartTest ADD FILE (NAME = N'FG2', FILENAME = N'E:\SQLData\Data\PartTest\FY2016.ndf') TO FILEGROUP FG2
ALTER DATABASE PartTest ADD FILE (NAME = N'FG3', FILENAME = N'E:\SQLData\Data\PartTest\FY2017.ndf') TO FILEGROUP FG3


--Tao partition function va partition scheme
USE PartTest
GO
CREATE PARTITION FUNCTION PFunction(DATETIME) AS RANGE RIGHT FOR VALUES ('2016-01-01','2017-01-01')
GO
CREATE PARTITION SCHEME PScheme_NGD AS PARTITION PFunction to (FG1,FG2,FG3)
--Ham PFunction se cat cac doan vao tung file group (o day co 2 doan va 3 khoang)
--khoang 1: < 2016-01-01
--khoang 2: tu 2016-01-01 den 2016-12-31
--khoang 3: > 2017-01-01
--Ham PScheme_NGD dung de dinh cac doan vao tung file group

--Tao bang dung partition scheme
USE PartTest
GO
CREATE TABLE dbo.Dt(
	Dt DATETIME
) ON PScheme_NGD(Dt)
GO
CREATE CLUSTERED INDEX CI_Dt on dbo.Dt(Dt) ON PScheme_NGD(Dt)
--Kiem tra phan doan du lieu
SELECT $PARTITION.PFunction('2017-03-31')
SELECT $PARTITION.PFunction('2016-03-31')
SELECT $PARTITION.PFunction('2015-03-31')

--Lua chon partition 3
SET STATISTICS TIME ON
SELECT * FROM Dt WHERE $PARTITION.PFunction(Dt) = 3
SET STATISTICS TIME OFF


SET STATISTICS TIME ON
SELECT * FROM Dt 
SET STATISTICS TIME OFF


--Khi rebuild index chi can rebuild cho mot doan
ALTER INDEX CI_Dt
ON dbo.Dt
Rebuild PARTITION = 3

Pivotable.sql

SELECT SellStartDate, 
[0], [1], [2], [3], [4]
FROM
(SELECT SellStartDate,DaysToManufacture, StandardCost 
    FROM AdventureWorks.Production.Product) AS SourceTable
PIVOT
(
AVG(StandardCost)
FOR DaysToManufacture IN ([0], [1], [2], [3], [4])
) AS PivotTable;

ProcedureImportCSVFile.sql

USE TestDB
GO
ALTER PROCEDURE dbo.ImportCSV(
	@Path VARCHAR(MAX),
	@Table VARCHAR(MAX),
	@FormatFilePath VARCHAR(MAX),
	@FirstRow VARCHAR(MAX)
) AS
BEGIN
	DECLARE @Sql VARCHAR(MAX)
	SET @Sql = '
	BULK INSERT ' + @Table + ' FROM '''+@Path+ '''
		WITH (
			FORMATFILE = '''+@FormatFilePath+''',
			FIRSTROW = '+@FirstRow+')'
	PRINT @Sql
	EXEC sp_sqlexec @Sql
END


--BULK INSERT TestDB.dbo.WorkOrderImportFromCSV 
--FROM 'E:\SQLData\Data\WorkOrder.csv'
--WITH (FORMATFILE = 'E:\SQLData\Data\WorkOrder.Fmt',
--	FIRSTROW = 2)
GO
EXEC TestDB.dbo.ImportCSV 'E:\SQLData\Data\WorkOrder.csv','TestDB.dbo.WorkOrderImportFromCSV','E:\SQLData\Data\WorkOrder.Fmt',2

ProcedureImportTextFile.sql

USE TestDB
GO
ALTER PROCEDURE dbo.ImportTextFile(
	@Path VARCHAR(MAX),
	@Table VARCHAR(MAX),
	@FieldTerminator VARCHAR(MAX),
	@RowTerminator VARCHAR(MAX),
	@FirstRow VARCHAR(MAX)
) AS
BEGIN
	DECLARE @Sql VARCHAR(MAX)
	SET @Sql = '
	BULK INSERT ' + @Table + ' FROM '''+@Path+ '''
		WITH (
			FIELDTERMINATOR = '''+@FieldTerminator+''',
			FIRSTROW = '+@FirstRow+',ROWTERMINATOR = '''+@RowTerminator+'''
			)'

	PRINT @Sql
	EXEC sp_sqlexec @Sql
END
GO


	--BULK INSERT TestDB.dbo.WorkOrderImportFromTextFile FROM 'E:\SQLData\Data\WorkOrder.txt'
	--	WITH (
	--		FIELDTERMINATOR = ',',
	--		FIRSTROW = 2,
	--		ROWTERMINATOR = '\n'
	--		)

	--Lưu ý: ROWTERMINATOR = '\n' khi kết thúc dòng là xuống dòng

-- EXEC TestDB.dbo.ImportTextFile 'E:\SQLData\Data\WorkOrder.txt','TestDB.dbo.WorkOrderImportFromTextFile',',','\n',2

ProcedureSelectWorkOrder.sql

USE TestDB
GO
ALTER PROCEDURE dbo.SelectWorkOrder
(
	@ProductID VARCHAR(MAX),
	@MinOrderQty VARCHAR(MAX)
) AS
BEGIN
DECLARE @sql VARCHAR(MAX) =''
SET @sql = 'SELECT * FROM TestDB.dbo.WorkOrder A WHERE A.OrderQty >= '+@MinOrderQty+'AND LEFT(A.ProductID,2) = '+@ProductID
PRINT @sql
EXEC sp_sqlexec @sql
PRINT 'Select Successfully'
END


--EXEC dbo.SelectWorkOrder 71,10

SetIdentityInsertOn.sql

SET IDENTITY_INSERT TestDB.dbo.WorkOrder ON
INSERT INTO TestDB.dbo.WorkOrder
([WorkOrderID]
    ,[ProductID]
    ,[OrderQty]
    ,[StockedQty]
    ,[ScrappedQty]
    ,[StartDate]
    ,[EndDate]
    ,[DueDate]
    ,[ScrapReasonID]
    ,[ModifiedDate]
    ,[SegmentOrder])

SELECT A.*,B.Segment FROM [AdventureWorks].[Production].[WorkOrder] A
CROSS APPLY  TestDB.dbo.Segment(A.OrderQty,10,20,50) B
   
SET IDENTITY_INSERT TestDB.dbo.WorkOrder ON

SwitchOutDataByPartition.sql

CREATE DATABASE SwitchOut
GO
--Tao cac file group
ALTER DATABASE SwitchOut ADD FILEGROUP FG1
ALTER DATABASE SwitchOut ADD FILEGROUP FG2
ALTER DATABASE SwitchOut ADD FILEGROUP FG3
ALTER DATABASE SwitchOut ADD FILEGROUP FG4
--Them data vao moi file group
ALTER DATABASE SwitchOut ADD FILE (NAME = 'F1', FILENAME = 'E:\SQLData\Data\SwitchOut\SwitchOut_F1.ndf') TO FILEGROUP FG1
ALTER DATABASE SwitchOut ADD FILE (NAME = 'F2', FILENAME = 'E:\SQLData\Data\SwitchOut\SwitchOut_F2.ndf') TO FILEGROUP FG2
ALTER DATABASE SwitchOut ADD FILE (NAME = 'F3', FILENAME = 'E:\SQLData\Data\SwitchOut\SwitchOut_F3.ndf') TO FILEGROUP FG3
ALTER DATABASE SwitchOut ADD FILE (NAME = 'F4', FILENAME = 'E:\SQLData\Data\SwitchOut\SwitchOut_F4.ndf') TO FILEGROUP FG4
GO

USE SwitchOut
GO
--tao Partition Function (Range left se lay max la cut point, min la cut point lien truoc +1)
CREATE PARTITION FUNCTION PF_SwitchOut(INT) AS RANGE RIGHT FOR VALUES (1000,2000,3000)
--tao Partition Scheme
CREATE PARTITION SCHEME PS_SwitchOut AS PARTITION PF_SwitchOut TO (FG1,FG2,FG3,FG4)
--tao bang se partition du lieu theo ID vao cac file group
CREATE TABLE MyPartTable
(
	ID INT IDENTITY PRIMARY KEY,
	MyData VARCHAR(100)
) ON PS_SwitchOut(ID)

--chen them du lieu vao bang
DECLARE @ID TABLE (ID int)
DECLARE @StartId int
DECLARE @EndId int

SET @StartId = 1
SET @EndId = 10000

WHILE(@StartId <= @EndId)
BEGIN
	INSERT INTO @ID
	SELECT @StartId
	SET @StartId = @StartId + 1
END

INSERT INTO MyPartTable(MyData)
SELECT * FROM @ID


--Chuyen du lieu tu 1 bang sang 1 bang khac ngay tuc thi
--Tao bang tam
CREATE TABLE dbo.Tbl_1000 (
	ID INT IDENTITY PRIMARY KEY,
	MyData VARCHAR(100)
) ON FG1 
GO
--Switch out toi Tbl_1000
ALTER TABLE MyPartTable SWITCH PARTITION 1 TO Tbl_1000
--Kiem tra ket qua
SELECT * FROM MyPartTable
SELECT * FROM Tbl_1000
--nhu vay du lieu da duoc cat vao Tbl_1000

TestIndex.sql

--Hieu nang cua create INDEX
--Khong su dung INDEX
DECLARE @TEST_PLAYER TABLE (ID int, MOST_PLAYER_ID int)
DECLARE @Start int
DECLARE @End int
DECLARE @i datetime
DECLARE @e datetime
SET @Start = 1
SET @End = 10000

WHILE (@Start < @End)
	BEGIN
		INSERT INTO @TEST_PLAYER
		SELECT @Start, @Start + 1000
		SET @Start = @Start + 1
	END
SET @i = GETDATE()
SELECT * FROM @TEST_PLAYER
SET @e = GETDATE()

SELECT DATEDIFF(MILLISECOND,@i,@e)
--253

--su dung index
DECLARE @TEST_PLAYER TABLE(ID int INDEX Ix CLUSTERED, MOST_PLAYER_ID int)
DECLARE @Start int
DECLARE @End int
DECLARE @i datetime
DECLARE @e datetime
SET @Start = 1
SET @End = 10000
WHILE (@Start < @End)
BEGIN
	INSERT INTO @TEST_PLAYER
	SELECT @Start, @Start + 1000
	SET @Start = @Start + 1
END
SET @i = GETDATE()
SELECT * FROM @TEST_PLAYER
SET @e = GETDATE()
SELECT DATEDIFF(MILLISECOND,@i,@e)
--253
DROP TABLE ##TEST_PLAYER
CREATE TABLE ##TEST_PLAYER(ID int INDEX Ix NONCLUSTERED, MOST_PLAYER_ID int)
DECLARE @Start int
DECLARE @End int
DECLARE @i datetime
DECLARE @e datetime
SET @Start = 1
SET @End = 100000
WHILE (@Start < @End)
BEGIN
	INSERT INTO ##TEST_PLAYER
	SELECT @Start, @Start + 1000
	SET @Start = @Start + 1
END
SET @i = GETDATE()
SELECT * FROM ##TEST_PLAYER
SET @e = GETDATE()
SELECT DATEDIFF(MILLISECOND,@i,@e)
--1893
DROP TABLE ##TEST_PLAYER
CREATE TABLE ##TEST_PLAYER(ID int,MOST_PLAYER_ID int)
DECLARE @Start int
DECLARE @End int
DECLARE @i datetime
DECLARE @e datetime
SET @Start = 1
SET @End = 100000
WHILE (@Start < @End)
BEGIN
	INSERT INTO ##TEST_PLAYER
	SELECT @Start, @Start + 1000
	SET @Start = @Start + 1
END
SET @i = GETDATE()
SELECT * FROM ##TEST_PLAYER
SET @e = GETDATE()
SELECT DATEDIFF(MILLISECOND,@i,@e)
--1916

TestTable.sql

/*    ==Scripting Parameters==

    Source Server Version : SQL Server 2016 (13.0.1742)
    Source Database Engine Edition : Microsoft SQL Server Enterprise Edition
    Source Database Engine Type : Standalone SQL Server

    Target Server Version : SQL Server 2016
    Target Database Engine Edition : Microsoft SQL Server Enterprise Edition
    Target Database Engine Type : Standalone SQL Server
*/

USE [TestDB]
GO

/****** Object:  Table [dbo].[ConvertTextFile]    Script Date: 9/5/2017 5:38:19 PM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[ConvertTextFile](
	[WorkOrderID] [float] NULL,
	[ProductID] [float] NULL,
	[OrderQty] [float] NULL,
	[StockedQty] [float] NULL,
	[ScrappedQty] [float] NULL,
	[StartDate] [float] NULL,
	[EndDate] [float] NULL,
	[DueDate] [float] NULL,
	[ScrapReasonID] [float] NULL,
	[ModifiedDate] [float] NULL,
	[SegmentOrder] [varchar](255) NULL
) ON [PRIMARY]
GO

backup.sql

--Dieu kien backup
--1.Database de o che do RECOVERY MODE la full
--2.Database da tung duoc full backup
--3.Log file chua tung bi SHRINK
--Tao Database
USE master
GO
IF DB_ID('TestDB') IS NOT NULL DROP DATABASE TestDB
GO 
CREATE DATABASE TestDB
GO
USE TestDB
GO
CREATE TABLE dbo.Table1(
	ID INT IDENTITY,
	TEN VARCHAR(32)
)
GO
INSERT INTO dbo.Table1(TEN)
SELECT A = 'Nguyen Van A' UNION ALL
SELECT B = 'Nguyen Van B' UNION ALL
SELECT C = 'Nguyen Van C'
GO
--full backup
BACKUP DATABASE TestDB TO DISK = 'E:\SQLData\Backup\TestDB.bak' WITH INIT
--2017-08-02 14:54:50.807
--Them du lieu moi sau khi full back up (can duoc thuc hien dinh ki cuoi tuan)
INSERT INTO dbo.Table1(TEN)
SELECT 'Nguyen Van D' UNION ALL
SELECT 'Nguyen Van E'
--differental backup (chi backup du lieu sau thoi diem full backup) (thuc hien vao 1 ngay trong tuan)
BACKUP DATABASE TestDB TO DISK = 'E:\SQLData\Backup\TestDB_Diff.bak' WITH DIFFERENTIAL
--Mo phong tinh huong database da duoc full backup ngay hom truoc, them moi du lieu ngay hom sau va bi xoa
DELETE FROM dbo.Table1
--Dong Database de khong cho ai co the truy cap du lieu den khi Database duoc khoi phuc xong. Chuyen sang che do 1 nguoi dung
--SINGLE_USER
ALTER DATABASE TestDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
--Ghi lai thoi diem xay ra su co
SELECT GETDATE()
--2017-08-02 15:16:05.323
--Khoi phuc lai DB theo thu tu ban backup truoc roi den ban Log backup:
USE master
GO
RESTORE DATABASE TestDB FROM DISK = 'E:\SQLData\Backup\TestDB.bak' WITH NORECOVERY
RESTORE DATABASE TestDB FROM DISK = 'E:\SQLData\Backup\TestDB.trn' WITH STOPAT = '2017-08-02 15:16:05'

USE TestDB
SELECT * FROM dbo.Table1

--Chuyen Database ve che do nhieu nguoi dung
ALTER DATABASE TestDB SET MULTI_USER