我正在开发一个应用程序,我需要将SQL响应作为XML获取到XML文件中(并将其存储在某个物理位置,例如c:\ xyz.xml).
我可以使用SQL Server中提供的规定生成XML内容,如下所示.
SELECT * FROM @Table FOR XML AUTO, ELEMENTS
Run Code Online (Sandbox Code Playgroud)
其中:@Table是一个表变量.
我想知道如何将查询输出存储到SQL Server本身的XML文件中.
是否存在生成数字作为输出的散列函数之类的东西?
基本上 - 我需要在我的 SQL Server 中创建一个关键列,它是确定性的(结果是可重复的)并且基于数据库中的 3 列。此列将用作将进入远程系统的那条数据的键(我将使用此键来匹配在外部系统中创建的数据备份)。
对于类似的事情,我一直在使用 SHA5 散列算法来创建我的密钥,但是我目前正在处理的数据必须是数字。
有任何想法吗?结果必须是可重复的,因此必须基于输入列。
我有一个有三列的表:A,B,C.
价值观是:
+---+-----+----+
| A | B | C |
+---+-----+----+
| 1 | -10 | 5 |
| 1 | 0 | 5 |
| 1 | 10 | 5 |
| 2 | 10 | 12 |
| 2 | 0 | 12 |
| 3 | -10 | 14 |
| 4 | 0 | 8 |
| 4 | 10 | 8 |
| 5 | 0 | 6 |
| 5 | 1 …Run Code Online (Sandbox Code Playgroud) 我有一张桌子MODELS,有几个ITEMS可以属于。该ITEMS表是一个分层表,PARENT列上有一个自联接。根级别的项目将Null在PARENT. 项目可以深入任何级别。
create table MODELS (
MODELID int identity,
MODELNAME nvarchar(200) not null,
constraint PK_MODELS primary key (MODELID)
)
go
create table ITEMS (
ITEMID int identity,
MODELID int not null,
PARENT int null,
ITEMNUM nvarchar(20) not null,
constraint PK_ITEMS primary key (ITEMID)
)
go
alter table ITEMS
add constraint FK_ITEMS_MODEL foreign key (MODELID)
references MODELS (MODELID)
go
alter table ITEMS
add constraint FK_ITEMS_ITEMS foreign key (PARENT)
references …Run Code Online (Sandbox Code Playgroud) sql sql-server stored-procedures recursive-query sql-server-2008
我有一个按周分区的表.start_time上有一个索引当我运行它时 -
EXPLAIN SELECT COUNT(uniq_id) FROM call_fact WHERE CAST(start_time AS DATE) = '2018-01-23' AND source_key=2;
Run Code Online (Sandbox Code Playgroud)
它会扫描每个分区表,而不是转到正确的子表.查询优化器是否应该足够聪明才能选择正确的子表?有没有办法强制postgres去正确的子表?
EXPLAIN(analyze, buffers) SELECT COUNT(uniq_id) FROM call_fact WHERE CAST(start_time AS DATE) = '2018-01-23' AND source_key=2;
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Aggregate (cost=649579.52..649579.53 rows=1 width=26) (actual time=845.998..845.998 rows=1 loops=1)
Buffers: shared hit=34839 read=1312
-> Append (cost=0.12..647969.68 rows=643937 width=26) (actual time=175.416..792.387 rows=457658 loops=1)
Buffers: shared hit=34839 read=1312
-> Index Scan using call_fact_cast_start_time_idx on call_fact (cost=0.12..8.14 rows=1 width=26) (actual time=0.006..0.006 rows=0 loops=1)
Index Cond: ((start_time)::date = '2018-01-23'::date)
Filter: (source_key = …Run Code Online (Sandbox Code Playgroud) 我有一个小表格来尝试了解该LAST_VALUE函数在 PostgreSQL 中的工作原理。它看起来像这样:
id | value
----+--------
0 | A
1 | B
2 | C
3 | D
4 | E
5 | [null]
6 | F
Run Code Online (Sandbox Code Playgroud)
我想要做的是使用LAST_VALUE先行的非NULL值来填充NULL值,所以结果应该是这样的:
id | value
----+--------
0 | A
1 | B
2 | C
3 | D
4 | E
5 | E
6 | F
Run Code Online (Sandbox Code Playgroud)
我试图完成的查询是:
SELECT LAST_VALUE(value)
OVER (PARTITION BY id ORDER BY case WHEN value IS NULL THEN 0 ELSE 1 END ASC)
FROM test; …Run Code Online (Sandbox Code Playgroud) 就像任何零售业务一样,我们有一个 Orders 表和一个 Inventory 表。我要做的是检查我们有足够库存可供发货的订单。我需要考虑以下几点:
如果订单中的所有商品都可用,则将此订单视为“可交付”
按照OrderID( intvalue)的顺序检查 Order 的可交付状态。即OrderID = 12,依此类推。
在检查下一个订单的可交付性之前,减少下一个订单的可用库存(不更新库存表,只考虑之前订单已经消耗的库存数量)。
如果我们没有足够的库存用于订单中的 1 个或多个项目,请完全忽略该订单并且不要减少下一个要检查的订单的可用库存数量。
在以下示例中:
Order = 100 完全可交付,因为我们有足够的库存来存放所有产品。Order = 200 无法完全交付,因为 PID 2 需要数量 5,但在订单 100 消耗了 2 个之后,我们只剩下 3 个Order = 300也完全可交付,因为我们有所有产品的足够库存。测试数据
INSERT INTO @Inventory (PID, Qty)
VALUES (1 , 10)
, (2 , 5)
, (3 , 2)
INSERT INTO @Order (OrderID, PID, Qty)
VALUES (100 , 1 , 2) --\
, (100 , 2 …Run Code Online (Sandbox Code Playgroud) 我有一个sql视图,让我们调用它SampleView,其结果具有以下格式.
Id (INT), NameA (VARVHAR(50)), NameB (VARCHAR(50)), ValueA (INT), ValueB (INT)
Run Code Online (Sandbox Code Playgroud)
视图的结果集包含可能具有相同Id或不相同的行.如果有两个或多个具有相同Id的行,我希望得到类似以下内容的内容
SELECT
Id,
MAX(NameA),
MAX(NameB),
MAX(ValueA),
MAX(ValueB)
FROM SampleView
GROUP BY Id
ORDER BY Id
Run Code Online (Sandbox Code Playgroud)
关于列Id,ValueA并ValueB没有任何问题.另一方面,MAX用于两者NameA和NameB事情并不像预期的那样.经过一些谷歌搜索和搜索后,我意识到这MAX不是字母数字列的"预期"行为.说出预期,我的意思是MAX在我的情况下使用,它将返回NameA最大字符数的值,MAX(LEN(NameA)).我在这里要提到的是,没有任何可能为相同长度NameA的相同值设置两个值Id.这可能会使问题更容易解决.
我使用SQL Server 2012和TSQL.
您对我如何处理这个问题有任何建议吗?
非常感谢您提前寻求帮助.
假设MyTable的表结构(MyTableId NVARCHAR(MAX)PRIMARY KEY,NumberOfInserts INTEGER).
我经常需要更新,即递增现有记录的计数器,或者如果不存在,则为NumberOfInserts插入值为0的新记录.
实质上:
IF (MyTableId exists)
run UPDATE command
ELSE
run INSERT command
Run Code Online (Sandbox Code Playgroud)
我担心的是由于竞争条件等原因而丢失数据.
什么是最安全的写这种方式?
如果可能的话,我需要100%准确,并且愿意在必要时牺牲速度.
我的客户想在他的Order表(来自Sage)上使用插入触发器来创建使用API的Freshdesk票证.
作为我开发的一部分,我构建了一个存储过程,在提供订单号时可以正常工作.但是,将相同的代码移植到触发器中会毫无错误地返回,但是当存储过程中的相同代码工作时,Freshdesk系统中不会出现任何内容.
我希望评论为什么触发器中的API调用可能是一个坏主意,但Freshdesk调用非常快(从存储过程<1秒).
我想知道的是 - 出于某种原因,SQL Server在架构上是否禁止这样做?如果允许,我可以在哪里查找被抛出的错误.
编辑2:好的,这是整个触发器......以前的版本只有OA调用.
ALTER TRIGGER [dbo].[CreateFreshdeskTicketFromOrder]
ON [dbo].[OEORDH]
AFTER INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Get the original order number, and use that in the main lookup query
DECLARE @ORDNUM VARCHAR(22)
SELECT @ORDNUM = ORDNUMBER FROM inserted
-- Variables for fields going to the API
DECLARE @EMAIL VARCHAR(60), @SHPCONTACT VARCHAR(60), @ORDNUMBER VARCHAR(22)
DECLARE @LOCATION VARCHAR(6), @EXPDATE INT
DECLARE …Run Code Online (Sandbox Code Playgroud) sql ×10
sql-server ×8
postgresql ×2
freshdesk ×1
group-by ×1
hash ×1
key ×1
max ×1
triggers ×1
xml ×1