我正在为类似于汽车销售数据库的会计/销售类型系统制作一个数据库,并希望为以下现实世界的操作进行一些交易:
销售员取消销售取消销售。
我在网上找到的例子太笼统了,比如“这是一笔交易”,我想要一些类似于我试图做的事情来理解它。
任何人都有一些很好的类似或相关的 sql 示例,我可以看看来设计这些?人们是否将交易用于销售数据库?或者,如果您之前做过这种 sql 事务,您能否概述如何进行这些事务?
到目前为止,我的(因为不是真正的问题而关闭)线程堆栈溢出:需要用于销售跟踪或财务数据库的示例 SQL 事务程序
最新更新,用户将从 ac# 应用程序发送新的输入/更改/和取消。申请资料:
展示的产品(这是具有 3 个子节点的父节点)
Sales(Products On Display 的子节点)
产品自定义功能(展示产品的子节点)
产品价格/当前状态(展示产品的子节点)
C# 应用程序将该数据打包为 XML 格式,然后执行一些 SQL 存储过程,其中事务将 xml 到表的转换保存在一起,转换为使用相同父/子节点结构设计的 SQL 表,使用的内容类似于此相关的答案所描述的内容关于堆栈溢出的问题:https : //stackoverflow.com/q/2756773/613799
我希望有一本关于设计多用户销售数据库的书,以及相关用户应用程序将使用的存储过程事务从头开始 app->xml->database。如果你知道一个好的,或者一本书的一章,请告诉我。
我正在为多个用户设计一个系统,将他们的请求排队到一个 Web 服务,该服务接受诸如创建新条目、更改条目、请求数据之类的请求。我们将使用的许多 Web 服务调用将分层数据作为参数(设计用于匹配 c# 对象结构的层次结构),而其他调用(例如对允许的条目类型列表的请求)不需要参数。队列是必要的,因为 Web 服务有 5 秒左右的节流要求,并且多个用户只会使用一次 Web 服务登录。
从 Web 服务返回的 xml 数据最终会返回,由我们自己的服务器应用程序解析,并插入到某种类型的响应表中,以便用户应用程序可以知道已收到请求并获取返回的任何数据。
基本图片是
用户应用程序(多个用户)--> 服务请求队列 <--> 服务器应用程序 <--> 网络服务
和类似的回应
用户应用(多用户)<--服务响应队列<-->服务器应用<-->web服务
我自己正在创建用户应用程序和服务器应用程序,只是想了解如何设计将使用 sql server 的服务请求队列和响应队列,并试图弄清楚这些队列将有多少个表。请求和响应以分层形式出现(根据请求返回不同的层次类型),都以非分层形式出现。
此类对象由外部 Web 服务 API 指定。用户以该对象结构的不同相关形式发送不同类型的请求,这些请求将存储在队列系统/队列中,然后由服务器应用程序提取以进行出队以满足 Web 服务的节流要求。服务器应用程序也可能取消不相关的请求,例如如果时间过长并且它怀疑有错误或不相关的请求,或者如果用户应用程序与来自 Web 服务的数据流不同步。
任何人都有用于此目的的简单示例多用户 sql server 队列?有没有关于这个主题的好书?或者网络教程?似乎有必要限制任何 Web 服务的多个用户......
不久前,我问了一个关于如何使开始对话框和发送更灵活的问题,以便它可以嵌入到将 to、from 参数作为 sysname 变量的过程中。
多个发起者将使用的服务代理程序开始对话对话..如何将参数传递给它
然而,正如 Rusanu 在回答中提到的,同样的技术不能用于接收的 From 子句。
实际上它会起作用。大多数 SSB 动词都接受参数作为参数(当然,RECEIVE 的队列名称除外)。参数的类型为 sysname ...
实际上发送方已经完成,我现在试图以同样的方式使接收变得灵活,例如:
CREATE PROCEDURE QueueReceive
@myTargetQueue SYSNAME
@cg UNIQUEIDENTIFIER OUTPUT
@ch UNIQUEIDENTIFIER OUTPUT
@msg XML OUTPUT
as
BEGIN TRANSACTION;
WAITFOR
( RECEIVE TOP(1)
@cg = conversation_group_id,
@msg = cast(message_body as XML),
@ch= conversation_handle
FROM @myTargetQueue
), TIMEOUT 3000;
COMMIT
...
Run Code Online (Sandbox Code Playgroud)
似乎不能在 RECEIVE 的 from 子句中使用 sysname 类型的变量?如果我必须在动态 SQL 中执行此操作,我将如何从接收函数的动态 sql 执行中返回所有变量、conversation_group_id、conversation_handle 等?有没有更好的技术来完成同样的事情?
谢谢你。
修复/更新到目前为止:我正在创建一堆 IF 子句,具体取决于传递的参数是什么,它只会执行不同的整个接收语句。它效率不高,因为我每次添加新 QUEUE 时都必须更改过程代码,但我想现在可以了...
开始对话的标准格式是这样的:
Declare @dialog_handle UNIQUEIDENTIFIER
BEGIN DIALOG CONVERSATION @dialog_handle
FROM SERVICE initiator_1
TO SERVICE 'target_1'
ON CONTRACT MyContract ;
Run Code Online (Sandbox Code Playgroud)
但是我想创建一个灵活的通用过程,它可以从多个启动器服务中的任何一个发送特定对话(假设我有 10 个使用相同存储过程的潜在启动器服务)。
Create Procedure SendJoinRequest (@initiatorServiceName varchar)
AS
Declare @dialog_handle UNIQUEIDENTIFIER
BEGIN DIALOG CONVERSATION @dialog_handle
FROM SERVICE @initiatorServiceName
TO SERVICE 'target_1'
ON CONTRACT MyContract ;
Run Code Online (Sandbox Code Playgroud)
我想这行不通,因为服务的标识符在
FROM SERVICE @initiatorServiceName
Run Code Online (Sandbox Code Playgroud)
实际上不能是字符串,而必须是服务的实际名称...是否有一种简单的方法可以将其作为参数传递?或者我是否必须将所有这些嵌套在一个令人讨厌的串联字符串执行中?
@String = blahblah + blah blah + escapecharacters + blah
execute(@String)
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
我想在一个WITH
包含这个等差数列的子句中生成一个命名表:
????????????
? mynumber ?
????????????
? 0 ?
? 30 ?
? 60 ?
? 90 ?
? 120 ?
? 150 ?
? 180 ?
? 210 ?
????????????
Run Code Online (Sandbox Code Playgroud)
...基于变量p_maxnumber
(p_maxnumber
例如此处= 211)。
理想情况下,它将采用以下格式:
WITH sequenceTable AS
(SELECT mynumber
FROM ...),
Run Code Online (Sandbox Code Playgroud)
在同一WITH
个子句中,我想在下游派生表中使用该序列来获取数据并最终用作图表呈现的时间轴。我有一种感觉有一种方法可以使用创建序列来做到这一点?只是想找到一种方法来创造这个仍然......