模拟实战数据落地:MSsql通过存储过程获得销售数据视图

news/2024/10/5 15:24:32/

话不多说

目标需求:通过传递参数(查询条件及查询时间)调用存储过程获得销售数据视图,并且在视图中有时间字段供后续引用,实现数据对接获取任务

最终结果如图:

实现以上结果步骤如下:

1)建立users表和orders表分别代表用户及订单,其中订单中用户id与用户表中用户id关联,并随机插入一些测试数据,sql脚本如下:

-- 创建 Users 表
CREATE TABLE Users (UserId INT PRIMARY KEY IDENTITY(1,1),Username NVARCHAR(255) NOT NULL
);-- 创建 Orders 表
CREATE TABLE Orders (OrderId INT PRIMARY KEY IDENTITY(1,1),UserId INT NOT NULL,OrderTime DATETIME NOT NULL,Amount DECIMAL(18, 2) NOT NULL,Status NVARCHAR(50),CONSTRAINT FK_Orders_Users FOREIGN KEY (UserId) REFERENCES Users(UserId)
);-- 插入 Users 表的模拟数据
INSERT INTO Users (Username) VALUES ('Alice');
INSERT INTO Users (Username) VALUES ('Bob');
INSERT INTO Users (Username) VALUES ('Charlie');
INSERT INTO Users (Username) VALUES ('David');-- 插入 Orders 表的模拟数据
INSERT INTO Orders (UserId, OrderTime, Amount, Status) VALUES (1, '2024-01-02T12:00:00', 99.99, 'Shipped');
INSERT INTO Orders (UserId, OrderTime, Amount, Status) VALUES (2, '2024-01-02T15:30:00', 199.99, 'Processing');
INSERT INTO Orders (UserId, OrderTime, Amount, Status) VALUES (1, '2024-01-03T09:15:00', 249.99, 'Shipped');
INSERT INTO Orders (UserId, OrderTime, Amount, Status) VALUES (3, '2024-01-04T18:45:00', 39.99, 'Delivered');
INSERT INTO Orders (UserId, OrderTime, Amount, Status) VALUES (4, '2024-01-05T11:00:00', 59.99, 'Shipped');

建表插入数据结果如下:

订单表:

用户表:

2)写存储过程,实现查询数据生成视图,关键是要将查询时间也写入到视图

存储过程代码如下:

USE [agui_conn]
GO
/****** Object:  StoredProcedure [dbo].[sp_GetOrdersByTimestamp]    Script Date: 09/28/2024 13:17:42 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_GetOrdersByTimestamp]@Timestamp NVARCHAR(100),@Condition NVARCHAR(100) -- 假设这是一个额外的条件,如订单状态
AS
BEGINIF OBJECT_ID('dbo.vw_OrdersByTimestamp', 'V') IS NOT NULLBEGINEXEC sp_executesql N'DROP VIEW dbo.vw_OrdersByTimestamp';END-- 创建一个视图来显示所需的订单信息DECLARE @sql NVARCHAR(MAX);SET @sql = N'CREATE VIEW dbo.vw_OrdersByTimestamp ASSELECT u.Username as 用户名, o.OrderTime as 订单时间,o.Amount as 订单金额,'''+ @Timestamp + ''' AS 查询时间FROM Orders oINNER JOIN Users u ON o.UserId = u.UserIdWHERE (o.Status = ''' + @Condition+ ''')'; -- 假设订单表中有一个Status字段o.OrderTime >= ''' + CONVERT(NVARCHAR, @Timestamp, 120) + ''' ANDEXEC sp_executesql @sql;END

3)测试执行存储过程语句

EXEC sp_GetOrdersByTimestamp @Timestamp = '2024-09-28 16:27:10.000', @Condition = 'Shipped';--'Delivered';--

执行结果:

以上存储过程是重点,重点,重点!!!

关键有个小问题未解决,不知怎样能不重建视图,而不断增加查询记录,查了很多资料都说用触发器或临时表,还在探索


http://www.ppmy.cn/news/1535008.html

相关文章

使用 HTMX 从服务器获取文本更新 Quill Editor 的内容

使用 HTMX 可以用很简单的代码&#xff0c;通过 AJAX 的访问&#xff0c;向 WEB SERVER 请求数据。 如果请求来的数据直接用来更新一个 <div></div> 的内容&#xff0c;无需写代码&#xff0c;很简单就能搞定。代码如下&#xff1a; <button hx-get"GetC…

论Microsoft Visual Studio C++有多油饼

#1 Microsoft Visual Studio C 2023&#xff1a; 必须安装在C盘 为啥&#xff1f; 安其他盘能亖啊&#xff1f; 真有病 #2 Microsoft Visual Studio C 2013&#xff1a; 每个硬盘必须都腾出至少8个G的空间 不是我安在这个盘不就是为了其他盘没空间吗&#xff1f; 合着…

SOMEIP_ETS_166: SD_TestFieldUINT8

测试目的&#xff1a; 验证DUT能够通过Getter和Setter方法正确地发送和接收TestFieldUINT8字段的值。 描述 本测试用例旨在确保DUT的ETS能够响应Tester的请求&#xff0c;正确地使用Getter方法获取TestFieldUINT8的值&#xff0c;以及使用Setter方法设置新的值。 测试拓扑&…

前端Vue项目的自动打包、上传与部署

文章目录 前言思路与流程脚本实现1. 打包前端项目2. 上传前端项目4. 传递密码5. 代码优化完整脚本结语前言 在实际项目开发中,并不是所有项目都会配置 CI/CD 流程,特别是在中小型团队或者公司内部测试环境中,很多时候我们仍然需要手动打包、上传和部署项目。这个过程虽然简…

【HarmonyOS NEXT】实现防截屏功能

【需求】 登录不允许截屏验证码页不允许截屏首页允许截屏 【API】 方式一&#xff1a; 当app只有一个窗口时&#xff0c;可以使用getLastWindow window.getLastWindow(context).then((lastWindow)>{ lastWindow.setWindowPrivacyMode(flag) })方式二&#xff1a; 当app…

TB6612电机驱动模块(STM32)

目录 一、介绍 二、模块原理 1.原理图 2.电机驱动原理 三、程序设计 main.c文件 Motor.h文件 Motor.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 TB6612FNG 是东芝半导体公司生产的一款直流电机驱动器件&#xff0c;它具有大电流 MOSFET-H 桥结构&#xff…

ThreadLocal内存泄漏分析

一、ThreadLocal内存泄漏分析 1.1 ThreadLocal实现原理 1.1.1、set(T value)方法 查看ThreadLocal源码的 set(T value)方法&#xff0c;可以发现数据是存在了ThreadLocalMap的静态内部类Entry里面 其中key为使用弱引用的ThreadLocal实例&#xff0c;value为set传入的值。核…

【AI知识点】负对数似然损失函数(Negative Log-Likelihood Loss,NLL)

负对数似然损失函数&#xff08;Negative Log-Likelihood Loss&#xff0c;NLL&#xff09; 是机器学习&#xff0c;尤其是分类问题中常用的一种损失函数。它用于衡量模型预测的概率分布与真实标签之间的差异。负对数似然损失函数的目标是最大化正确类别的预测概率&#xff0c;…