当 nvarchar(max) 列只有几 MB 数据时,我在表上的单行插入/更新语句上遇到性能不佳的情况。
这是我的表结构:
CREATE TABLE [dbo].[tbl_set_Cart](
[ID] [int] NOT NULL,
[AS400_CUSTOMER_COD] [nvarchar](50) NOT NULL,
[AS400_LISTIN] [int] NOT NULL,
[VALUE] [nvarchar](max) NOT NULL,
[DELIVERY_COSTS] [nvarchar](max) NOT NULL,
[ITEMS_COUNT] [int] NOT NULL,
[ITEMS] [nvarchar](max) NOT NULL,
[KIND] [int] NOT NULL,
[CHECKOUT_INFO] [nvarchar](max) NOT NULL,
[ISSUES] [nvarchar](max) NOT NULL,
[LAST_CHECK] [datetime] NOT NULL,
[USER_ID] [int] NOT NULL,
[IMPERSONATED_USER_ID] [int] NOT NULL,
[OVERRIDE_PRICES] [bit] NOT NULL,
[HAS_ISSUE] [bit] NOT NULL,
[IS_CONFIRMED] [bit] NOT NULL,
[IS_COLLECTED] [bit] NOT NULL,
[_METADATA] [nvarchar](max) NOT …Run Code Online (Sandbox Code Playgroud) 此查询不起作用,但错误没有意义
SELECT count(*) FROM t
WHERE json_typeof(info->'vatids')='array' AND json_array_length(info->'vatids')>1;
Run Code Online (Sandbox Code Playgroud)
错误:无法获得标量的数组长度
PS:同上 JSONb。
这是我当前的查询:
SELECT innings_no,
Player_Name,
sum(NoBalls) as NB
FROM (
SELECT A.innings_no,
A.bowler,
A.Runs_In_Over + ifnull(B.Extra_runs, 0) = 0 as Maiden,
A.Balls - ifnull(B.NoBalls, 0) as Balls,
A.Runs_In_Over + ifnull(B.Extra_runs, 0) as Runs,
ifnull(C.Wicket, 0) as Wickets,
Zero,
Four,
Six,
ifnull(Wides, 0) as Wides,
ifnull(NoBalls, 0) as Noballs
FROM (SELECT over_id,
ABBB.innings_no,
ABBB.bowler,
count(ABBB.ball_id) as Balls,
Sum(ABB.Runs_Scored) As 'Runs_In_Over',
SUM(if(ABB.runs_scored = 0, 1, 0)) as Zero,
SUM(if(ABB.runs_scored = 4, 1, 0)) as Four,
SUM(if(ABB.runs_scored = 6, 1, 0)) as Six
FROM …Run Code Online (Sandbox Code Playgroud) 我将 JSON 字符串传递给存储过程以插入仓库库存。
有时,会有多个具有相同产品的订单项,在相同的货架上、相同的托盘 (LPN) 上、具有相同的日期。我想将它们汇总到表中的一行中。
JSON 表示已接收并存放到某个位置的各个行。这里有 2 个相同的项目:
[{"StockCode": "ABC123", "Qty": "200", "Bin": "E4B4_L", "LPN": "1234", "PutDate": "2022-01-21 18:35:53 UTC"}, {"StockCode": "ABC123", "Qty": "400", "Bin": "E4B4_L", "LPN": "1234", "PutDate": "2022-01-21 18:36:43 UTC"}]
Run Code Online (Sandbox Code Playgroud)
所以:
ABC | 200 | 2022-01-21 00:00:00.000 | LPN1234
ABC | 400 | 2022-01-21 00:00:00.000 | LPN1234
Run Code Online (Sandbox Code Playgroud)
应汇总为:
ABC | 600 | 2022-01-21 00:00:00.000 | LPN1234
Run Code Online (Sandbox Code Playgroud)
我尝试对数量进行 GROUP BY 和 SUM,但表中的结果行仍然是 2 个单独的行。我意识到由于时间戳的原因 PutDate 不一样,所以我认为肯定将其转换为 DATE 可以解决这个问题,但事实并非如此。
SQL脚本:
ALTER Procedure spc_PutAway
(@json NVARCHAR(MAX) = '')
AS …Run Code Online (Sandbox Code Playgroud) 这是我正在尝试做的一个例子,
SELECT *
FROM ( VALUES ('{"a":1}'::json) )
AS t(data)
WHERE data = '{"a":1}'::json;
Run Code Online (Sandbox Code Playgroud)
但它给了我这个错误,
ERROR: operator does not exist: json = json
LINE 4: WHERE data = '{"a":1}'::json;
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud) json ×5
postgresql ×2
sql-server ×2
array ×1
group-by ×1
insert ×1
mysql ×1
mysql-8.0 ×1
update ×1