Generative Artificial Intelligence: How generative AI works.pdf
T sql denali code Day of .Net
1. USE DENALI_DEMO;
GO
--Create a SEQUENCE
IF EXISTS(SELECT * FROM sys.objects WHERE NAME =
'mySequence')
DROP SEQUENCE mySequence
CREATE SEQUENCE mySequence AS
BIGINT --TINYINT, SMALLINT, BIGINT, DECIMAL and
NUMERIC (0 scale)
START WITH 1
INCREMENT BY 1;
--Select values from the sequence
SELECT NEXT VALUE FOR mySequence;
SELECT NEXT VALUE FOR mySequence;
/*
CREATE SEQUENCE [schema_name . ] sequence_name
[ <sequence_property_assignment> [ ,…n ] ]
[ ; ]
<sequence_property_assignment>::=
{
[ AS { built_in_integer_type | user-
defined_integer_type } ]
| START WITH <constant>
| INCREMENT BY <constant>
| { MINVALUE <constant> | NO MINVALUE }
| { MAXVALUE <constant> | NO MAXVALUE }
| { CYCLE | NO CYCLE }
| { CACHE [<constant> ] | NO CACHE }
}
*/
2. IF EXISTS(SELECT * FROM sys.objects WHERE name =
'test1')
DROP SEQUENCE test1;
CREATE SEQUENCE test1;
SELECT NEXT VALUE FOR test1;
SELECT NEXT VALUE FOR mySequence;
--View Properties of the sequences
SELECT * FROM sys.sequences;
--Restart
ALTER SEQUENCE mySequence RESTART WITH 1;
--Use in a query, numbers in order of ProductID
SELECT NEXT VALUE FOR mySequence OVER(ORDER BY
ProductID) AS SEQ,
Name, ProductID
FROM AdventureWorks2008R2.Production.Product
ORDER BY ProductID;
--Numbers in order of ProductID, but sort results
--by Name
ALTER SEQUENCE mySequence RESTART WITH 1;
SELECT NEXT VALUE FOR mySequence OVER(ORDER BY
ProductID) AS SEQ,
Name, ProductID
FROM AdventureWorks2008R2.Production.Product
ORDER BY Name;
DROP SEQUENCE TEST2
CREATE SEQUENCE TEST2
3. --Multiple tables, columns
TRUNCATE TABLE Table1; -- one int column
TRUNCATE TABLE Table2; -- two int columns
INSERT INTO Table1(Col1,Seq1)
VALUES('A',NEXT VALUE FOR mySequence)
INSERT INTO Table2(Col1,Seq1,Seq2)
VALUES('B',NEXT VALUE FOR mySequence, NEXT VALUE FOR
mySequence),
('C',NEXT VALUE FOR mySequence, NEXT VALUE FOR
test1);
SELECT Col1, Seq1 FROM Table1;
SELECT Col1, Seq1, Seq2 FROM Table2;
--Cycling
IF EXISTS(SELECT * FROM sys.objects WHERE name =
'myCount')
DROP SEQUENCE myCount;
CREATE SEQUENCE myCount
AS tinyint
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 5
CYCLE;
SELECT NEXT VALUE FOR myCount OVER(ORDER BY ProductID)
AS SEQ,
Name, ProductID
FROM AdventureWorks2008R2.Production.Product
4. ORDER BY ProductID;
--Use in a transaction
TRUNCATE TABLE TestTable;
--What is the next number?
SELECT name, current_value FROM sys.sequences
WHERE name = 'mySequence';
BEGIN TRANSACTION
INSERT INTO TestTable(Col1, Col2)
VALUES('a',NEXT VALUE FOR mySequence),
('b',NEXT VALUE FOR mySequence),
('c',NEXT VALUE FOR mySequence);
ROLLBACK
SELECT name, current_value FROM sys.sequences
WHERE name = 'mySequence';
--PERMISSION
GRANT INSERT, UPDATE, SELECT ON Table1 TO testuser
EXECUTE AS LOGIN = 'testuser'
GO
INSERT INTO Table1 SELECT 'f',1000
--try to use the sequence object
INSERT INTO Table1 SELECT 'g',NEXT VALUE FOR
mySequence
REVERT
GRANT UPDATE ON mySequence TO testuser;
EXECUTE AS LOGIN = 'testuser';
GO
5. INSERT INTO Table1 SELECT 'g',NEXT VALUE FOR
mySequence;
REVERT;
DECLARE @range_first_value_output sql_variant,
@range_last_value_output sql_variant;
EXEC sp_sequence_get_range
@sequence_name = N'mySequence'
, @range_size = 30
, @range_first_value = @range_first_value_output
OUTPUT
, @range_last_value = @range_last_value_output OUTPUT
;
SELECT @range_first_value_output AS FirstNumber,
@range_last_value_output AS LastNumber;
--END SEQUENCE
--Ad-hoc Query Paging
USE AdventureWorks2008R2;
GO
SELECT Name, ProductID
FROM Production.Product
ORDER BY ProductID;
--Get rows 6 and on
SELECT Name, ProductID
FROM Production.Product
ORDER BY ProductID OFFSET 5 ROWS;
6. --Start with 6th rows and fetch only 10
SELECT Name, ProductID
FROM Production.Product
ORDER BY ProductID OFFSET 5 ROWS FETCH NEXT 10 ROWS
ONLY;
--END PAGING
--THROW
USE DENALI_DEMO
GO
--THROW
THROW 500001,'an error message',10
create table Table_PK(Col1 int primary key)
--inside TRY/CATCH
BEGIN TRY
INSERT INTO Table_PK(COl1) VALUES(1);
INSERT INTO Table_PK(COl1) VALUES(1);
END TRY
BEGIN CATCH
INSERT INTO
ERROR_LOG(ErrorDate,ErrorNumber,ErrorMessage)
VALUES(getdate(),ERROR_NUMBER(),ERROR_MESSAGE());
THROW;
END CATCH
--END THROW
7. --WITH RESULT SETS
EXECUTE ('SELECT 1,2')
WITH RESULT SETS(
(Column1 int NOT NULL)
);
EXECUTE('SELECT 1')
WITH RESULT SETS NONE;
EXECUTE(
'EXECUTE(''SELECT 1 AS COL1'')
WITH RESULT SETS UNDEFINED;')
WITH Result sets undefined;
EXEC AdventureWorks2008R2.Production.ProductList
'%Chain%'
EXEC AdventureWorks2008R2.Production.ProductList
'%Chain%'
WITH RESULT SETS (
([Product Number] int,
[Product Name] nvarchar(50),
[List Price] money),
([Product Name] nvarchar(50),
[Number of Orders] int)
);
--END WITH RESULT SETS
8. --SYS.SP_DESCRIBE_FIRST_RESULT_SET
--old command returns colum names but not data
USE AdventureWorks2008R2;
GO
SET FMTONLY ON;
GO
SELECT *
FROM AdventureWorks2008R2.HumanResources.Employee;
SET FMTONLY OFF;
EXEC sys.sp_describe_first_result_set
N'SELECT * FROM
AdventureWorks2008R2.HumanResources.Employee;';
--Has two result sets, but first is always known
EXEC AdventureWorks2008R2.Production.ProductList
'%Chain%';
EXEC sys.sp_describe_first_result_set
N'AdventureWorks2008R2.Production.ProductList
''%Chain%''';
EXEC sys.sp_describe_first_result_set
N'IF (1=1) BEGIN
EXEC
AdventureWorks2008R2.Production.ProductList
''%Chain%''
END
ELSE BEGIN
9. EXEC
AdventureWorks2008R2.dbo.uspGetBillOfMaterials 1
END';
--END describe first result set
--Date/Time functions
--Date Time from Parts
SELECT DATEFROMPARTS(2011,8,6);
SELECT DATETIME2FROMPARTS(2011,8,6,14,30,59,12345,7);
--End of month
SELECT EOMONTH(GETDATE());
--END Date/Time
--Conversion functions
--PARSE ( string_value AS data_type [ USING culture ]
)
SELECT PARSE('August 6, 2011' AS SMALLDATETIME);
SELECT PARSE('ABCDE' AS SMALLDATETIME);
--TRY_PARSE ( string_value AS data_type [ USING
culture ] )
SELECT TRY_PARSE('August 6, 2011' AS SMALLDATETIME);
SELECT TRY_PARSE('ABCDE' AS SMALLDATETIME);
--TRY_CONVERT ( data_type [ ( length ) ], expression
[, style ] )
SELECT CONVERT(VARCHAR,GETDATE(),101);
SELECT CONVERT(INT,'123');
SELECT CONVERT(INT, 'ABC');
SELECT TRY_CONVERT(INT, 'ABC');
--END CONVERSION
10. --Logical Functions
--IIF
--Current CASE
SELECT CASE WHEN 1 = 2 THEN '1 equals 2' ELSE '1 does
not equal 2' END;
SELECT IIF(1 = 2, '1 equals 2','1 does not equal 2');
Use AdventureWorks2008R2;
GO
SELECT ProductID, IIF(Color IS NOT NULL,Color, 'No
color recorded') AS Color
FROM Production.Product;
--CHOOSE
SELECT ProductID, CHOOSE(ProductID % 3 +
1,'Apples','Oranges','Pears')
FROM Production.Product;
--END Logical functions
--String functions
--CONCAT
SELECT ProductID, Color, Size, Color + ' ' + Size
FROM Production.Product
WHERE Color IS NOT NULL OR Size IS NOT NULL;
SELECT ProductID, Color, Size, CONCAT(Color,' ',Size)
FROM Production.Product
WHERE Color IS NOT NULL OR Size IS NOT NULL;
--FORMAT
SELECT FORMAT(GETDATE(),'MM/dd/yyyy');
12. --OFFSET
/*
--NEAR
USE AdventureWorks2008R2;
GO
SELECT DocumentNode,Title
FROM Production.Document
WHERE CONTAINS(Document,'Reflector NEAR Assembly');
SELECT DocumentNode,Title
FROM Production.Document
WHERE CONTAINS(Document,'NEAR((Reflector,
Assembly),5)');
SELECT DocumentNode, Title, Document, KEY_TBL.RANK
FROM Production.Document AS DocTable INNER JOIN
CONTAINSTABLE(Production.Document, Document,
'(Reflector NEAR Assembly)' ) AS KEY_TBL
13. ON DocTable.DocumentNode = KEY_TBL.[KEY]
ORDER BY KEY_TBL.RANK;
--must be in order
SELECT DocumentNode,Title
FROM Production.Document
WHERE CONTAINS(Document,'NEAR((Reflector, Assembly),5,
TRUE)');
--END
*/
/*
--Compare to TOP, but TOP doesn't have a skip option
SET STATISTICS IO ON;
SELECT TOP(1000) Name, ProductID
FROM Production.Product
ORDER BY Name;
SELECT Name, ProductID
FROM Production.Product
ORDER BY Name OFFSET 0 ROWS FETCH NEXT 1000 ROWS ONLY;
SET STATISTICS IO OFF;
*/
/*
--Paging example from BOL, with an enhancement!
-- Ensure the database can support the snapshot
isolation level set for the query.
IF (SELECT snapshot_isolation_state FROM sys.databases
WHERE name = N'AdventureWorks2008R2') = 0
ALTER DATABASE AdventureWorks2008R2 SET
ALLOW_SNAPSHOT_ISOLATION ON;
14. GO
-- Set the transaction isolation level to SNAPSHOT
for this query.
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
GO
-- Beging the transaction
BEGIN TRANSACTION;
GO
-- Declare and set the variables for the OFFSET and
FETCH values.
DECLARE @StartingRowNumber int = 1
, @RowCountPerPage int = 3;
-- Create the condition to stop the transaction after
all rows have been returned.
WHILE (SELECT COUNT(*) FROM HumanResources.Department)
>= @StartingRowNumber
BEGIN
-- Run the query until the stop condition is met.
SELECT DepartmentID, Name, GroupName, COUNT(*)
OVER()/@RowCountPerPage AS TotalPages
FROM HumanResources.Department
ORDER BY DepartmentID ASC
OFFSET @StartingRowNumber - 1 ROWS
FETCH NEXT @RowCountPerPage ROWS ONLY;
-- Increment @StartingRowNumber value.
SET @StartingRowNumber = @StartingRowNumber +
@RowCountPerPage;
CONTINUE
END;
GO
15. COMMIT TRANSACTION;
GO;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
*/
/*
USE AdventureWorks2008R2;
GO
SELECT BusinessEntityID, TerritoryID
,DATEPART(yy,ModifiedDate) AS SalesYear
,CONVERT(varchar(20),SalesYTD,1) AS SalesYTD
,CONVERT(varchar(20),AVG(SalesYTD) OVER (PARTITION
BY TerritoryID
ORDER BY
DATEPART(yy,ModifiedDate)
),1) AS
MovingAvg
,CONVERT(varchar(20),SUM(SalesYTD) OVER (PARTITION
BY TerritoryID
ORDER BY
DATEPART(yy,ModifiedDate)
),1) AS
CumulativeTotal
FROM Sales.SalesPerson
WHERE TerritoryID IS NULL OR TerritoryID < 5
ORDER BY TerritoryID,SalesYear;
*/