AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-886

fa1c0n3r's questions

Martin Hope
fa1c0n3r
Asked: 2012-12-21 02:01:55 +0800 CST

生成算术序列

  • 2

我想在一个WITH包含这个算术级数的子句中生成一个命名表:

╔══════════╗
║ mynumber ║
╠══════════╣
║        0 ║
║       30 ║
║       60 ║
║       90 ║
║      120 ║
║      150 ║
║      180 ║
║      210 ║
╚══════════╝

...基于变量p_maxnumber(例如此处p_maxnumber= 211)。

理想情况下,它的格式如下:

WITH sequenceTable AS
(SELECT mynumber
FROM ...),

在同一WITH个子句中,我想在下游派生表中使用该序列来获取数据并最终用作图表呈现的时间轴。我觉得有一种方法可以使用创建序列来做到这一点?只是想找到一种方法来创建这个仍然......

oracle oracle-11g
  • 1 个回答
  • 1208 Views
Martin Hope
fa1c0n3r
Asked: 2012-12-12 18:06:10 +0800 CST

Select Count(*) FROM with-clause-named table order by a, b 不起作用

  • 1

我在存储过程中定义了一系列表,最终像这样返回到应用程序,然后最终形成一个简单的表,该表包含与先前定义的表不同的值以及该不同值重复的次数。出于某种原因,它似乎没有工作......

...存储过程...

OPEN p_retcursor FOR
WITH r AS
(SELECT ...
FROM MYDATATABLE),

s  AS
(SELECT ...
FROM r
WHERE ...)
,

t AS
(SELECT ...
WHERE ... 
JOIN ...
ON ...
FROM s)

SELECT t.*, COUNT(*) as distinctABcount
FROM t
GROUP BY t.columnA, t.columnB

我如何让它工作?我猜从技术上讲 columnA 和 columnB 不是表的列,而是 t 的列所以我认为评估的顺序有点混乱,因为 t 不是实际的表......查询在计数附近失败( *) 列部分并且可能在 GROUP BY 上失败。

谢谢。

更新 1:我有一个理论,如果我将所有命名的表串在一起到 from 子句内的子查询中,它将起作用......但是考虑到这个存储过程有数百行长,这似乎不是一个可以产生可读代码的解决方案...

更新 2:
理论是错误的,派生表不是问题,但正如答案所指出的,你不能要求比你在 group by 子句中设置的列更多的列。我通过按照建议更正查询的最后部分来修复它:

select t.columnA, t.columnB, COUNT(*) as distinctABcount
FROM t
GROUP BY t.columnA, t.columnB

正确运行。

oracle count
  • 1 个回答
  • 1154 Views
Martin Hope
fa1c0n3r
Asked: 2012-10-24 02:35:22 +0800 CST

日期类型的简单查询需要显式转换为日期的 to_date

  • 1

我的问题是,我有一个表,其中包含一个名为 myDateColumn 的列(例如),它的类型是日期:

我可以确认desc myTable包含这一行:

myDateColumn  NOT NULL     DATE   

但是,当我尝试选择特定日期之间的所有数据时,例如:

select * from myTable 
where myDateColumn 
between to_date('13-FEB-11', 'DD-MON-YY') AND TO_DATE('15-FEB-11', 'DD-MON-YY');

无论如何,我都会得到空结果,即使我确信某些数据存在于这个特定的日期范围内。

我发现的解决方法是将 myDateColumn 显式转换为日期:

select myDateColumn from myTable 
where to_date(myDateColumn) 
between to_date('13-FEB-11', 'DD-MON-YY') AND TO_DATE('15-FEB-11', 'DD-MON-YY');

它返回正确的结果,但它已经是一个日期类型!为什么在进行between逻辑比较之前需要将日期列显式转换为日期?

我问的原因是因为这个 select/where 将成为存储过程的一部分,选择特定日期范围内的数据在按日期分区的大表上运行,超过一千万行,如果我可以避免显式转换每行的每个 myDateColumn,那么理论上我也许可以节省一些查询时间。

或者是否有更正确的方法来运行此比较以选择日期范围内的数据?

谢谢你。

更新:Leigh 在答案中建议诊断表是否与他的查询不一致。他的查询结果是:

myDateColumn    TO_DATE(myDateColumn)   TO_CHAR(myDateColumn,'DD-MON-YYHH.MI.SSPM') TO_CHAR(myDateColumn,'YYYY')  
14-Feb-11   14-Feb-11   14-FEB-11 12.00.00 AM   0011
14-Feb-11   14-Feb-11   14-FEB-11 12.00.00 AM   0011
14-Feb-11   14-Feb-11   14-FEB-11 12.00.00 AM   0011
14-Feb-11   14-Feb-11   14-FEB-11 12.00.00 AM   0011
14-Feb-11   14-Feb-11   14-FEB-11 12.00.00 AM   0011

表明该between子句不起作用的原因是因为没有数据会落在查询间隔内,因为年份是 0011,在罗马帝国时期 :)

多谢你们。

oracle oracle-11g-r2
  • 2 个回答
  • 71080 Views
Martin Hope
fa1c0n3r
Asked: 2012-09-26 01:57:56 +0800 CST

如何使用输出 OUT sys_refcursor、OUT varchar2 和 OUT 编号制作存储过程,然后在 c#.net 应用程序中使用

  • 1

输出 refcursor、varchar2 和数字的存储过程的语法是什么?

除了 sys_refcursor 输出之外,我想在结果中输出所有三个,以便显示计数,以及一条指示成功查询的消息,但我似乎找不到一个很好的例子。

我当前的 C# 代码如下所示:

using Oracle.DataAccess.Client; 
//...

OracleCommand myCmd = new OracleCommand();
myCmd.Connection = myConnection;
myCmd.CommandText = "mypackage.myprocedure"
myCmd.CommandType = CommandType.StoredProcedure;
OracleParameter param0 = myCmd.Parameters.Add("myinput", OracleDbType.Varchar2, myinput, ParameterDirection.Input);
OracleParameter param1 = myCmd.Parameters.Add("myretcursor", OracleDbType.RefCursor, ParameterDirection.Output);

myConnection.Open();
OracleDataReader resultReader = myCmd.ExecuteReader();
mydatatable.Load(resultReader, LoadOption.OverwriteChanges);

Oracle 存储过程如下所示:

    PROCEDURE myprocedure (myinput IN Varchar2, myretcursor OUT sys_refcursor)

    IS

    BEGIN
    OPEN myretcursor FOR
    SELECT * FROM MYTABLE

    END myprocedure

我想我想将param2,param3作为附加输出参数添加到c#中,然后还以某种方式在存储过程中输出它们?我不知道如何做到这一点,并不断遇到错误。例如,理想情况下,我会将选择计数 (*) 作为输出传递给 c# 应用程序,以及像“查询成功”这样的 varchar2 字符串消息。

谢谢你。

更新:文森特的解决方案在下面工作......关于后面的 C# 代码,他提供的链接的答案建议将 reader = executereader 包含在 USING( ) 中以加载表,并在加载其他变量之前关闭阅读器。

https://stackoverflow.com/q/6882690/613799

根据来自 oracle 的字符串的大小,调用 c# 代码可能需要在字符串消息的输出参数定义中指定 varchar2 的大小。最后,以下链接有助于将计数从 OracleDecimal 类型转换为 C# int:

https://stackoverflow.com/q/3026036/613799

oracle oracle-11g-r2
  • 1 个回答
  • 19861 Views
Martin Hope
fa1c0n3r
Asked: 2012-09-09 07:47:23 +0800 CST

比较过程中 where 子句中的日期和时间戳变量

  • 3

我在类型的 Oracle 存储过程中有一个变量DATE(来自用户界面)和另一个TIMESTAMP类型的变量(数据库比用户在执行存储过程的代码中输入的内容更精确)。

我想做这样的事情:(伪代码)

select * from MYDATABASE where inputDate = extract(date from myDatabaseTimeStamp);

但是当我尝试这个时出现编译错误。知道什么是一个好的实际代码解决方案吗?

oracle oracle-11g-r2
  • 2 个回答
  • 54000 Views
Martin Hope
fa1c0n3r
Asked: 2012-08-31 18:36:28 +0800 CST

简单的 Oracle 查询挂起取决于 WHERE 子句

  • 3

不习惯使用 Oracle,但我们有一个大型数据库,其中有一个非唯一查询,例如

SELECT * FROM employees where department = 'HR'  

正在工作,结果列表没有问题。

但是当我这样做时

SELECT * FROM employees where employeeID = '3HVtxO-F3004728F87EF61E'  

oracle 数据库查询挂起(我期待一条记录回来,我确定它存在,因为我从另一个查询中复制粘贴了employeeID)。

对于列,两者之间的唯一区别是:

department is VARCHAR2(25)  NULL
employeeID is VARCHAR2(50)  NULL

此外,部门会有很多匹配项,而员工 ID 很可能有 1 个(我看不到它在表定义中被特别定义为唯一)。

其他表特性:

  • 实际上不是员工表,它有与工作相关的数据,所以我在这里重命名了它......
  • 包含超过一百万行和几十列
  • 有点旧的数据库,不确定是谁在很久以前设计的,可能存在数据库完整性/索引问题?
  • 没有 where 子句的常规 select * from employees 也不起作用,因为它冻结了大约 50 万行找到的标记。

知道为什么会发生这种情况吗?我应该更好地设计我的查询吗?您如何建议诊断与数据库本身问题相关的一些问题?试图掌握这个 oracle 数据库,但习惯起来有点尴尬,因为应该返回一个项目的简单查询被挂起。谢谢你。

更新 1:响应评论,该列没有索引。幸运的是,这是一个过时的表,根本不会使用,正在制作一个具有索引列的新版本,所以我认为这是一个问题。

关于第二个查询的计划,它看起来像:

Plan hash value: 123724717

------------------------------------------------------------------------------------------------
| Id  | Operation           | Name     | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |          |    12 |  4416 |  2376K  (1)| 07:55:19 |       |       |
|   1 |  PARTITION RANGE ALL|          |    12 |  4416 |  2376K  (1)| 07:55:19 |     1 |    14 |
|*  2 |   TABLE ACCESS FULL | [Employee|    12 |  4416 |  2376K  (1)| 07:55:19 |     1 |    14 |
------------------------------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - SEL$1
   2 - SEL$1 / Employees@SEL$1

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("EmployeeID"='3R5MMN-0F9345L9IK8A349A043')

Column Projection Information (identified by operation id):
-----------------------------------------------------------
-- The list of all the columns follows.

我的猜测是,这只是一张设计精美的表格,并没有设计得这么大,或者让某人实际使用很多 :) 出于实际目的,我将继续使用该表格的更新版本,该表格将具有索引并希望这将解决它。

oracle select
  • 1 个回答
  • 8834 Views
Martin Hope
fa1c0n3r
Asked: 2012-08-09 22:41:53 +0800 CST

在 13 TB Oracle 数据库上进行简单搜索以返回相关行(.net 应用程序?Java?)

  • 0

我确信有一些简单的方法可以做到这一点...我有一个简单的平面 Oracle 表,由于多年来积累了大量的行,它的大小为 13 TB 左右。我需要对其进行搜索(可以在多个字段中的任何一个上寻找匹配项),并希望返回列表中最相关的记录,例如前 50 名或前 100 名,然后我可以单击以获取更多详细信息(然后将专门查询该特定记录中的一个字段)。

对于 Oracle 中的这种搜索,您会推荐什么 .net 或 Java 库或包?有没有可能有一个示例开源应用程序或类似的示例可以做这件事?我希望找到一些东西,让我首先在某些列中确定匹配的优先级,并在表很大的情况下快速找到匹配,并且可以很容易地集成到需求的第二部分,即基于“线程”的常规查询该记录所属的。

谢谢你。

oracle query
  • 1 个回答
  • 302 Views
Martin Hope
fa1c0n3r
Asked: 2012-06-13 16:34:22 +0800 CST

如何使灵活的服务代理在存储的 sql 过程中接收,如何将“FROM”参数传递给接收

  • 5

前段时间我问了一个关于如何使开始对话框和发送更灵活的问题,以便它可以嵌入到将 to、from 参数作为 sysname 变量的过程中。

多个发起者将使用服务代理程序开始对话对话..如何将参数传递给它

但是,正如 Rusanu 在答案中提到的,这种相同的技术不能用于 Receive 的 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
...

似乎 sysname 类型的变量不能在 RECEIVE 的 from 子句中使用?如果我必须在动态 SQL 中执行此操作,我将如何从接收函数的动态 sql 执行中返回所有变量、conversation_group_id、conversation_handle 等?有没有更好的技术来完成同样的事情?

谢谢你。

FIX/Update SO FAR:我正在创建一堆 IF 子句,具体取决于传递的参数是什么,它只会执行不同的整个接收语句。它效率不高,因为每次添加新队列时我都必须更改过程代码,但我想现在就可以了...

sql-server sql-server-2008
  • 2 个回答
  • 6515 Views
Martin Hope
fa1c0n3r
Asked: 2012-06-07 17:43:40 +0800 CST

与多路复用服务代理订单队列中的一个目标队列通信的多个服务使用相同的会话句柄是否有任何问题?

  • 2

我问了一个关于在 SQL Service Broker 设置中实现对话组的问题,该设置有几个用户服务与服务器服务通信(处理要发送到外部 Web 服务的 xml 数据请求)。但是由于会话组不保证处理中的顺序,您是否认为对所有进入同一目标队列的请求使用相同的会话句柄有什么问题(保证无论来源如何发送它们的顺序) ?

背景: 您将如何为 Service Broker 队列的多个用户实现对话组/锁定?

正如Rusanu在回答中提到的那样,

并且不要忘记,在 SSB 中保证顺序的唯一构造是对话。因此,如果用户必须在会话 1 上发送对 A 的出价,然后在会话 2 上发送对 B 的出价,则不能保证在处理 B 的出价后会处理对 A 的出价。唯一的保证是,如果用户 1 为 A 发送了两次出价,它们将按照发送的顺序进行处理。

此外,如果两个不同的用户为产品 A 发送投标,则无法保证这些投标的处理顺序。但是,如果产品 A 的投标最终出现在相同的 CG 上,则可以保证只有一个“处理器线程”会同时看到用户 1 的投标和用户 2 的投标,但要小心,因为不能保证投标在 RECEIVE 结果集中按照它们被接收的顺序呈现。RECEIVE 仅保证:

* all messages in the result set are from the same CG
* the messages belonging to a conversation are in order

但结果中的对话顺序基本上是随机的(由对话句柄顺序驱动,一个 GUID)。

就像在真正的拍卖中一样,我实际上希望队列项目按照它们到达队列的顺序进行处理,用户 A、用户 B 和用户 C 发送相同产品的“投标”。我正在考虑通过对同一产品上的所有对话使用相同的对话句柄来实现整个事情。

到目前为止我想我会尝试什么:

该机制将是服务器应用程序将 N 个对话的对话启动器(初始化)发送到 User_0(其中 N 是我们将拥有的“多路复用对话通道”的数量)——我们将对话句柄存储在类似这样的表中:

CREATE TABLE ConversationChannelStatus
(ConversationChannel_pk numeric Primary Key, ConversationHandle UNIQUEIDENTIFIER)

USER_A 在发送“投标”时,将使用保存在 ConversationChannelStatus 表中的会话句柄从 User_A 服务向目标服务发送消息(由简单的数字主键“ConversationChannels”索引)。

将会话句柄存储在表中是否有问题,然后让多个启动器服务在向目标队列发送消息时继续使用相同的会话句柄?

谢谢你。

更新:抱歉对这些词感到困惑,对话 ID,对话句柄。绝对不能使用相同的会话句柄,因为它对于发起者和目标是不同的。我想我指的是尝试使用来自多个发起者的相同对话 ID 到同一个目标,以尝试维护来自多个服务的队列处理消息的顺序。

更新 2:仍在努力,但我想解决方案将是这样的,涉及对话句柄和对话组 ID。

  1. 首先初始化 N 个对话与用户 0,并将对话组 ID 和对话句柄都存储在频道设置表中。
  2. 当 UserA、UserB、UserC 服务想要加入时,服务器应用程序实际上会使用我们之前存储在频道设置表中的对话句柄与每个用户服务发起 N 次对话。
  3. 然后,用户服务(该消息的目标)将接收该消息并使用频道设置表中的会话组 ID 进行回复,仅当用户服务有“出价”要发送时。因此为用户服务提供了一种简单的方法来知道要使用哪个相关的会话组 ID,同时在服务器上保持所需的会话顺序APP服务队列处理来自用户 A、B、C 的消息(因为它正在回复由serverapp 服务)。我希望它有效!
sql-server sql-server-2008
  • 1 个回答
  • 2215 Views
Martin Hope
fa1c0n3r
Asked: 2012-06-06 23:17:33 +0800 CST

多个发起者将使用服务代理程序开始对话对话..如何将参数传递给它

  • 3

开始对话的标准格式如下:

Declare @dialog_handle UNIQUEIDENTIFIER
BEGIN DIALOG CONVERSATION @dialog_handle
   FROM SERVICE initiator_1
   TO SERVICE 'target_1'
   ON CONTRACT MyContract ;

但是我想创建一个灵活的通用过程,可以从许多发起者服务中的任何一个发送特定的对话(比如我有 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 ;

我想这行不通,因为服务的标识符在

FROM SERVICE @initiatorServiceName 

实际上不能是字符串,而必须是服务的实际名称......有没有一种简单的方法可以将其作为参数传递?还是我必须将所有这些嵌套在一个连接字符串的讨厌执行中?

@String = blahblah + blah blah + escapecharacters + blah
execute(@String)

谢谢你的帮助

sql-server sql-server-2008
  • 1 个回答
  • 1554 Views
Martin Hope
fa1c0n3r
Asked: 2012-05-25 01:54:24 +0800 CST

您将如何为 Service Broker 队列的多个用户实施对话组/锁定?

  • 2

您如何使用他们自己的用户应用程序实例为多个用户实施对话组,但将相关消息发送到服务代理队列?这种实现有什么好的例子吗?原以为可以自己设置对话组ID,保证各个用户的某组消息是相关的,但是好像这个值会自动生成为UNIQUEIDENTIFIERS...这还是最好的办法吗去做吧?

我想确保捕获并锁定相关消息,例如“同一团队”的两个用户一起竞标同一个项目,以便服务器应用程序逻辑可以一起正确处理这些相关消息(基本上只有第一个将被接受,而第二个将被拒绝,直到用户的视图可以更新,以便他们知道另一个用户已经更改了出价)。

流向是从用户 A、B、C 向队列发送 xml 消息,然后是出队服务,该服务将 xml 发送到外部 Web 服务。我们发送的消息是结构化的 xml 消息,这些消息将在出队后修改外部 Web 服务上不同项目的订单。

谢谢!

sql-server sql-server-2008
  • 1 个回答
  • 2148 Views
Martin Hope
fa1c0n3r
Asked: 2012-05-03 18:07:10 +0800 CST

寻找使用 SQL 数据库作为队列来限制多个用户的 Web 服务请求的示例设计

  • 5

我正在设计一个系统,供多个用户将他们的请求排队到 Web 服务,该服务接受诸如创建新条目、更改条目、请求数据等请求。我们将使用的许多 Web 服务调用将分层数据作为参数(旨在匹配 c# 对象结构的层次结构),而其他诸如请求允许的条目类型列表的请求则不需要参数。队列是必要的,因为 Web 服务有 5 秒左右的限制要求,并且多个用户只能使用一个 Web 服务登录。

xml 从 Web 服务返回的数据最终会返回,由我们自己的服务器应用程序解析,并插入到某种类型的响应表中,以便用户应用程序可以知道请求已收到并获取返回的任何数据。

基本图片是

用户应用程序(多个用户)--> 服务请求队列 <--> 服务器应用程序 <--> 网络服务

和类似的回复

用户应用(多用户)<--服务响应队列<-->服务器应用<-->web服务

在此处输入图像描述

我正在自己创建用户应用程序和服务器应用程序,并试图了解如何设计将使用 sql server 的服务请求队列和响应队列,并试图弄清楚这些队列将拥有多少表请求和响应以分层形式出现(根据请求返回不同的层次结构类型),两者都是非分层形式。

此类对象由外部 Web 服务 API 指定。用户以该对象结构的不同相关形式发送不同类型的请求,这些请求将存储在队列系统/队列中,然后由服务器应用程序提取以进行出列以满足 Web 服务的节流要求。服务器应用程序也可能会取消不相关的请求,例如,如果时间过长并且它怀疑有错误或不相关的请求,或者如果用户应用程序未与来自 Web 服务的数据流同步。 在此处输入图像描述

任何人有任何用于此目的的简单示例多用户 sql 服务器队列?有没有关于这个主题的好书?还是网络教程?似乎有必要限制任何网络服务的多个用户......

sql-server database-design
  • 2 个回答
  • 6148 Views
Martin Hope
fa1c0n3r
Asked: 2011-02-24 21:46:58 +0800 CST

试图将 XML 转换为层次结构的 SQL 表,任何人都可以很好地解释这个代码示例的两个部分吗?

  • 4

我正在尝试学习如何将 XML 转换为层次结构的 SQL 表。

我从微软论坛中找到了一个旧代码片段,这基本上是我想要做的,但我想知道是否有人可以帮助弄清楚这段代码的逐行情况,特别是在将 xml 加载到@XML

--I understand this part, just making the tables  

DECLARE @Books TABLE (BookID int identity(1,1),BookTitle varchar(50),BookLanguage varchar(20),BookPrice decimal(18,2))  
DECLARE @Topics TABLE (TopicID int identity(1,1),BookID int,TopicTitile varchar(50),Page int)  

--I understand this part, defining the @xml variable to be the xml below.. just a usual xml...


DECLARE @xml XML  
SET @xml = '  
<bookstore>  
    <name>My Bookstore</name><br/>  
    <location>New York</location><br/>  
    <book>  
        <title lang=&quot;eng&quot;>Harry Potter</title>  
        <price>29.99</price>  
        <tableOfContents>  
            <topic>  
                <title>Harry Potter Topic 1</title>  
                <page>2</page>  
            </topic>  
            <topic>  
                <title>Harry Potter Topic 2</title>
                <page>5</page>
            </topic>
        </tableOfContents>
    </book>
    <book>
        <title lang=&quot;eng&quot;>Learning XML</title>
        <price>39.95</price>
        <tableOfContents>
            <topic>
                <title>Learning XML Topic 1</title>
                <page>1</page>
            </topic>
            <topic>
                <title>Learning XML Topic 2</title>
                <page>2</page>
            </topic>
        </tableOfContents>
    </book>
</bookstore>'



--what is going on below here?  I am familiar with inserting data into tables,  
--but what kind of insert is this where you are selecting some things and then doing a  
--from @xml.nodes also, what is that T(c) at the end?  and do we always have to put    
--a [1] after each xml element to denote we are referring to the first one we encounter?  


INSERT INTO @Books  
SELECT T.c.value('title[1]','varchar(50)') AS 'BookTitle',  
    T.c.value('(title/@lang)[1]','varchar(20)') AS 'BookLanguage',  
    T.c.value('price[1]','decimal(18,2)') AS 'BookPrice'  
FROM @xml.nodes('/bookstore/book') T(c)  


--what is going on here as well?  what is n(x) ? 
--could you explain this line by line-ish as well? I ran this on  
--SQL Server Management Studio and noticed that both of the 'topic titles' for each  
--book got inserted.  Where in the code did those get put into the table?

INSERT INTO @Topics  
SELECT b.BookID,n.x.value('title[1]','varchar(50)') AS 'TopicTitile',  
    n.x.value('page[1]','int') AS 'TopicPage'  
FROM @Books b   
cross apply @xml.nodes('/bookstore/book/tableOfContents/topic[../../title=sql:column("b.BookTitle")]') n(x)  


--below here is just regular sql selects so this makes sense.  

SELECT BookID,BookTitle,BookLanguage,BookPrice FROM @Books  
SELECT TopicID,BookID,TopicTitile,Page FROM @Topics  

我所指并试图从旧帖子中学习的论坛是:

http://social.msdn.microsoft.com/Forums/en/sqlxml/thread/7216ccc9-c1d7-418d-95a2-ec3a96de2c27

sql-server-2008 sql-server-2005
  • 1 个回答
  • 15966 Views
Martin Hope
fa1c0n3r
Asked: 2011-02-12 19:19:33 +0800 CST

用于销售跟踪或财务数据库的 SQL 交易过程示例

  • 5

我正在为类似于汽车销售数据库的会计/销售类型系统创建数据库,并希望为以下现实世界的操作进行一些交易:

  1. 推销员创造新产品运送到地板上(itempk、汽车制造商、年份、价格)。
  2. 推销员改变价格。  
  3. 销售员为销售的产品创建销售条目(salespk、itemforeignkey、销售价格、销售员)。  
  4. 销售人员取消已删除产品的项目。  
  5. 推销员为取消的销售取消销售。

       我在网上找到的例子太笼统了,比如“这是一笔交易”,我想要一些类似于我试图做的事情来理解它。

有人有一些很好的类似或相关的 sql 示例我可以看一下来设计这些吗?人们是否将事务用于销售数据库?或者,如果你之前做过这种 sql 事务,你能不能对如何进行这些事务做一个大纲?

我的(因为不是真正的问题而关闭)线程到目前为止堆栈溢出:需要用于销售跟踪或财务数据库的示例 SQL 事务过程

最新更新,用户将从 ac# 应用程序发送新的输入/更改/和取消。申请资料:

  • 产品展示(这是具有 3 个子节点的父节点)

  • 销售(产品展示的子节点)

  • 产品自定义功能(产品展示的子节点)

  • 产品价格/当前状态(产品展示的子节点)

C# 应用程序将把数据打包成 XML 格式,然后执行一些 SQL 存储过程,其中事务将 xml 到表的转换保存到 SQL 表中,使用相同的父/子节点结构设计,使用类似于此相关问题的答案所描述的内容关于堆栈溢出的问题: https ://stackoverflow.com/q/2756773/613799

我希望有一本关于设计多用户销售数据库的书,以及相关用户应用程序从零开始应用程序->xml->数据库将使用的存储过程事务。如果您知道一个好书或一本书的一章,请告诉我。

sql-server database-design
  • 4 个回答
  • 4661 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve