MSSQL, Express, Developer
GS.SQL
понедельник, 24 ноября 2025 г.
понедельник, 10 ноября 2025 г.
25.11.10, DeepSeek, SQL, Table, Trades, Matching, Positions
25.11.10, DeepSeek, SQL, Table, Trades, Matching, Positions
USE [Example01]
GO
/****** Object: Table [dbo].[TradesExample] Script Date: 10.11.2025 21:49:15 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TradesExample](
[ID] [int] IDENTITY(1,1) NOT NULL,
[TradeNumber] [int] NOT NULL,
[Qty] [int] NOT NULL,
[ContrTradeNumber] [int] NOT NULL
) ON [PRIMARY]
GO
-------------------------------------------------------------------------
USE Example01
SELECT ContrTradeNumber, SUM(Qty) AS TotalQty
FROM dbo.TradesExample
GROUP BY ContrTradeNumber;
--------------------------------------------------------------------------
SELECT TOP (1000) [ID]
,[TradeNumber]
,[Qty]
,[ContrTradeNumber]
FROM [Example01].[dbo].[TradesExample]
----------------------------------------------------------------------------
| 2 | 1 | 2 | 1 |
| 3 | 2 | -1 | 1 |
| 4 | 3 | -1 | 1 |
| 5 | 4 | -3 | 4 |
| 6 | 5 | 1 | 4 |
| 7 | 6 | 2 | 4 |
| 8 | 8 | -1 | 8 |
| 9 | 9 | -1 | 9 |
| 10 | 10 | 1 | 8 |
| 11 | 11 | 1 | 9 |
| NULL | NULL | NULL | NULL |
----------------------------------------------------------------------------
USE [Example01]
GO
INSERT INTO [dbo].[TradesExample]
([TradeNumber]
,[Qty]
,[ContrTradeNumber])
VALUES
(<TradeNumber, int,>
,<Qty, int,>
,<ContrTradeNumber, int,>)
GO
----------------------------------------------------------------------------
Это операции по открытию, закоытию позиций
ID, TradeNumber, Qty, ContrTradeNumber
2 1 2 1
3 2 -1 1
4 3 -1 1
5 4 -3 4
6 5 1 4
7 6 2 4
8 8 -1 8
9 9 -1 9
10 10 1 8
11 11 1 9
---------------------------------------------------------------------------------------------
Перескакивать через 0 нельзя.
НЕообходимо c начала закрыть в 0.
А потом открыть позиции от себя (со своим номером сделки.)
----------------------------------------------------------------------------------------------
А это запрос с группировкой на предмет открытых позиций, после сбоя
USE Example01
SELECT ContrTradeNumber, SUM(Qty) AS TotalQty
FROM dbo.TradesExample
GROUP BY ContrTradeNumber;
А потом уже открыть сделку от своего ТradeNumber
----------------
ContrTradeNumber, SUM(Qty) AS TotalQty
1 0
4 0
8 0
9 0
----------------
Вроде все понятно
Через 0 мы не можем перескочить,
потому что мы можем закрыть число не большее позиции (для Long)
-----------------------------------------------------------------------------------------------------
понедельник, 18 августа 2025 г.
DataBaseName, sqllocaldb, SQL, Instance
DataBaseName, sqllocaldb, SQL, Instance
Name to Connect to the SMSS 21
WIN-0EMQO515V3S\SQLDVLP25
sqllocaldb info
---------------------------
localdb
MSSQLLocalDB
MyInstance
ProjectModels
sqllocaldb i mssqllocaldb
PS C:\Users\Administrator> sqllocaldb i mssqllocaldb
Name: mssqllocaldb
Version: 16.0.1000.6
Shared name:
Owner: WIN-0EMQO515V3S\Administrator
Auto-create: Yes
State: Running
Last start time: 2025-08-19 01:47:05
Instance pipe name: np:\\.\pipe\LOCALDB#E5C14942\tsql\query
--------------------------------------------------------------------------------------------
appsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldbmovie;Database=RazorPagesMovieContext-a81f41d6-1eab-475a-b132-3c2bd35d013c;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
----------------------------------------------------------------------------------------
вторник, 8 июля 2025 г.
Otus, Project, 25.07.08, Project, SQL
Otus, Project, 25.07.08, Project, SQL
D:\VC25\Otus\CS\Projects\Shop\Scripts\250707\1
Create_Shop_Pro_01.sql - Procedures
Create_Shop2326.sql - main
main_250707.sql
D:\VC25\Otus\CS\Projects\Shop\Scripts\250707\3\
Shop_031.sql
Otus, Project, 25.07.08, Project, SQL
Otus, Project, 25.07.08, Project, SQL
D:\VC25\Otus\CS\Projects\Shop\Scripts\250707\2
Shop_02.sql
------------------
USE Shop
GO
BEGIN TRANSACTION;
DROP TABLE IF EXISTS dbo.OrderDetails;
DROP TABLE IF EXISTS dbo.Orders;
DROP TABLE IF EXISTS dbo.Products;
DROP TABLE IF EXISTS dbo.Users;
COMMIT TRANSACTION;
BEGIN TRANSACTION;
DROP PROCEDURE IF EXISTS dbo.AddProduct;
DROP PROCEDURE IF EXISTS dbo.ProcessOrderDetail;
DROP PROCEDURE IF EXISTS dbo.AddItemToOrderByName;
DROP PROCEDURE IF EXISTS dbo.GetUserReport;
DROP PROCEDURE IF EXISTS dbo.TotalCostCalculate
DROP PROCEDURE IF EXISTS dbo.AddNewUser;
DROP PROCEDURE IF EXISTS dbo.CreateOrder;
DROP PROCEDURE IF EXISTS dbo.AddItemToOrder;
DROP PROCEDURE IF EXISTS dbo.GetUserReport;
DROP PROCEDURE IF EXISTS dbo.CreateOrderByEmail;
COMMIT TRANSACTION;
GO
-- Таблица Products
CREATE TABLE Products (
ProductID INT IDENTITY(1,1) PRIMARY KEY,
ProductName NVARCHAR(255) NOT NULL,
Description NVARCHAR(MAX),
Price NUMERIC(10, 2) NOT NULL CONSTRAINT CK_Product_Price CHECK (Price > 0),
QuantityInStock INT NOT NULL CONSTRAINT CK_Product_Qty CHECK (QuantityInStock >= 0)
);
GO
-- Таблица Users
CREATE TABLE Users (
UserID INT IDENTITY(1,1) PRIMARY KEY,
UserName NVARCHAR(255) NOT NULL,
Email NVARCHAR(255) UNIQUE NOT NULL,
RegistrationDate DATETIME DEFAULT GETDATE()
);
GO
-- Таблица Orders
CREATE TABLE Orders (
OrderID INT IDENTITY(1,1) PRIMARY KEY,
UserID INT FOREIGN KEY REFERENCES Users(UserID),
OrderDate DATETIME DEFAULT GETDATE(),
Status NVARCHAR(50) NOT NULL
);
GO
CREATE TABLE OrderDetails (
OrderDetailID INT IDENTITY(1,1) PRIMARY KEY,
OrderID INT NOT NULL FOREIGN KEY REFERENCES Orders(OrderID),
ProductID INT NOT NULL FOREIGN KEY REFERENCES Products(ProductID),
Quantity INT NOT NULL CONSTRAINT CK_OrderDetails_Quantity CHECK (Quantity > 0),
TotalCost NUMERIC(10, 2) NULL -- Разрешаем NULL-значения
);
GO
-- ----------------------------------------------------------
CREATE PROCEDURE dbo.AddProduct
@ProductName NVARCHAR(100),
@Description NVARCHAR(255),
@Price DECIMAL(18, 2),
@QuantityInStock INT
AS
BEGIN
INSERT INTO Products (ProductName, Description, Price, QuantityInStock)
VALUES (@ProductName, @Description, @Price, @QuantityInStock);
END;
GO
-- ----------------------
CREATE PROCEDURE AddNewUser
@UserName NVARCHAR(100),
@Email NVARCHAR(100)
AS
BEGIN
INSERT INTO Users(UserName, Email)
VALUES (@UserName, @Email);
RETURN SCOPE_IDENTITY(); -- Возвращаем идентификатор нового пользователя
END;
GO
CREATE PROCEDURE CreateOrder
@UserID INT
AS
BEGIN
INSERT INTO Orders(UserID, Status)
VALUES (@UserID, 'pending');
RETURN SCOPE_IDENTITY(); -- Возвращаем идентификатор нового заказа
END;
GO
CREATE PROCEDURE AddItemToOrder
@OrderID INT,
@ProductID INT,
@Quantity INT
AS
BEGIN
DECLARE @CurrentStock INT;
SET @CurrentStock = (SELECT QuantityInStock FROM Products WHERE ProductID = @ProductID);
IF @CurrentStock >= @Quantity BEGIN
UPDATE Products SET QuantityInStock = QuantityInStock - @Quantity WHERE ProductID = @ProductID;
INSERT INTO OrderDetails(OrderID, ProductID, Quantity)
VALUES (@OrderID, @ProductID, @Quantity);
END ELSE BEGIN
PRINT 'Недостаточно товара на складе!';
END
END;
GO
CREATE PROCEDURE TotalCostCalculate
AS
BEGIN
UPDATE OrderDetails
SET TotalCost = Quantity * p.Price
FROM OrderDetails od
INNER JOIN Products p ON od.ProductID = p.ProductID;
END;
GO
CREATE PROCEDURE GetUserReport
@UserID INT
AS
BEGIN
SELECT
O.OrderID,
O.OrderDate,
O.Status,
OD.ProductID,
OD.Quantity,
OD.TotalCost,
P.ProductName,
P.Description
FROM Orders O
INNER JOIN OrderDetails OD ON O.OrderID = OD.OrderID
INNER JOIN Products P ON OD.ProductID = P.ProductID
WHERE O.UserID = @UserID;
END;
GO
-- ----------------------------------------
-- В магазин поступили товары
-- -----------------------------------------------------------------------------------------------------------------------------------------
EXEC dbo.AddProduct @ProductName = 'jackson usa', @Description = 'USA Signature guitar', @Price = 1500.00, @QuantityInStock = 13;
EXEC dbo.AddProduct @ProductName = 'Gibson LP', @Description = 'Gibson Les Paul Tribute', @Price = 1340.00, @QuantityInStock = 15;
EXEC dbo.AddProduct @ProductName = 'Schecter Plt', @Description = 'Schecter Platinium', @Price = 1700.00, @QuantityInStock = 18;
EXEC dbo.AddProduct @ProductName = 'Fender Am', @Description = 'Fender American Profi', @Price = 1000.00, @QuantityInStock = 26;
EXEC dbo.AddProduct @ProductName = 'Ibanez 550', @Description = 'Ibanez RG550', @Price = 1400.00, @QuantityInStock = 14;
EXEC dbo.AddProduct @ProductName = 'Gibson SG', @Description = 'Gibson SG Standard', @Price = 1100.00, @QuantityInStock = 24;
EXEC dbo.AddProduct @ProductName = 'Schecter BJ', @Description = 'Schecter Black Jack', @Price = 1600.00, @QuantityInStock = 16;
EXEC dbo.AddProduct @ProductName = 'Schecter Rpr', @Description = 'Schecter Reaper usa', @Price = 1400.00, @QuantityInStock = 11;
GO
-- ------------------------------------------------------------------------------------------------------------------------------------------
-- В Магазин пришли Rony James Dio и Janis Joplin.
-- Регистрация Покупателей
-- Регистрация Rony
DECLARE @UserID_Rony INT;
EXEC @UserID_Rony = Shop.dbo.AddNewUser 'Rony James Dio', 'rony@jamesdio.com';
-- Регистрация Janis
DECLARE @UserID_Janis INT;
EXEC @UserID_Janis = Shop.dbo.AddNewUser 'Janis Joplin', 'janis@joplin.com';
-- Каждый Покупатель создал один заказ
-- Rony создал Заказ
DECLARE @OrderID_Rony INT;
EXEC @OrderID_Rony = Shop.dbo.CreateOrder @UserID_Rony;
-- Janis создал Заказ
DECLARE @OrderID_Janis INT;
EXEC @OrderID_Janis = Shop.dbo.CreateOrder @UserID_Janis;
-- Каждый Покупатель выбрал товары для Заказа
-- Rony выбрал два разных Gibson
-- 2 товарные позиции в Заказе
EXEC Shop.dbo.AddItemToOrder @OrderID_Rony, 5, 2; -- 2 шт. Gibson LP
EXEC Shop.dbo.AddItemToOrder @OrderID_Rony, 1, 1; -- 1 шт. Gibson SG
-- Janis выбрала три разных позиции Schecter, Jackson , Fender
-- 3 товарные позиции в Заказе
EXEC Shop.dbo.AddItemToOrder @OrderID_Janis, 3, 2; -- 2 шт. Schecter BJ
EXEC Shop.dbo.AddItemToOrder @OrderID_Janis, 6, 3; -- 3 шт. Jackson USA
EXEC Shop.dbo.AddItemToOrder @OrderID_Janis, 8, 1; -- 1 шт. Fender Am
-- Расчет стоимости каждой товарной позиции
EXEC TotalCostCalculate
-- Магазин выдал квитанцию по каждому заказу с товарными позициями обоим Покупателям
EXEC Shop.dbo.GetUserReport @UserID_Rony;
EXEC Shop.dbo.GetUserReport @UserID_Janis;
GO
Delete, Drop, Truncate, Shrink, Giga
Delete, Drop, Truncate, Shrink, Giga
https://giga.chat/link/gcswkbvWef
USE Shop
GO
BEGIN TRANSACTION;
DROP TABLE IF EXISTS dbo.OrderDetails;
DROP TABLE IF EXISTS dbo.Orders;
DROP TABLE IF EXISTS dbo.Products;
DROP TABLE IF EXISTS dbo.Users;
COMMIT TRANSACTION;
GO
BEGIN TRANSACTION;
DROP PROCEDURE IF EXISTS dbo.AddProduct;
DROP PROCEDURE IF EXISTS dbo.ProcessOrderDetail;
DROP PROCEDURE IF EXISTS dbo.AddItemToOrderByName;
DROP PROCEDURE IF EXISTS dbo.GetUserReport;
COMMIT TRANSACTION;
GO