Session: 2026-05-25 08:45:27 GMT+8
- Session Key: agent:main:dingtalk-connector:direct:17600802669338842
- Session ID: 20874608-b5f2-46db-9ce9-d14a2d9f566c
- Source: webchat
Conversation Summary
user: wa wiki 知识库加入网站 wa 钉钉 cli assistant: 已添加工作日志:
1、WL-0136 :wiki 知识库加入网站;
2、WL-0137 :钉钉 cli; user: wa 项目效果视频录制 assistant: 已添加工作日志:
1、WL-0138 :项目效果视频录制; user: 给出查询U8存货代码是否有效的sql语句 assistant: 可以,常见做法是按 存货编码 去 U8 的 Inventory 表查询。 如果能查到、且没有停用/禁用,就说明这个存货代码有效。
-- 查询某个存货代码是否有效
SELECT
cInvCode AS 存货编码,
cInvName AS 存货名称,
cInvStd AS 规格型号,
cComUnitCode AS 主计量单位,
bInvmng AS 是否存货管理,
bPurchase AS 是否采购,
bSale AS 是否销售,
bSelf AS 是否自制,
bProxyForeign AS 是否委外,
bDisable AS 是否停用
FROM Inventory
WHERE cInvCode = '这里替换成存货编码';如果你只是想判断“是否有效”,可以直接用这个更简洁的 SQL:
-- 判断存货编码是否有效
SELECT
CASE
WHEN EXISTS (
SELECT 1
FROM Inventory
WHERE cInvCode = '这里替换成存货编码'
AND ISNULL(bDisable, 0) = 0
)
THEN '有效'
ELSE '无效'
END AS 结果;如果你想查 多个存货编码,可以这样:
SELECT
cInvCode AS 存货编码,
cInvName AS 存货名称,
CASE
WHEN ISNULL(bDisable, 0) = 0 THEN '有效'
ELSE '停用'
END AS 状态
FROM Inventory
WHERE cInvCode IN ('编码1', '编码2', '编码3');如果你那边还想要我顺手给你一版:
- 适合插件里直接调用的 SQL
- 返回 1/0 的 SQL
- 连带检查“是否末级存货、是否可采购”的 SQL
我可以直接继续给你整理成 U8 里更实用的版本。 user: 列名 'bDisable' 无效。 assistant: 对,Inventory 里很多账套/版本没有 bDisable 这个字段,我刚才那版不够稳,得改。
先用这版最通用的:
SELECT
cInvCode AS 存货编码,
cInvName AS 存货名称,
cInvStd AS 规格型号
FROM Inventory
WHERE cInvCode = '这里替换成存货编码';如果只是判断“编码是否存在且有效”,通常先按“是否存在”判断:
SELECT
CASE
WHEN EXISTS (
SELECT 1
FROM Inventory
WHERE cInvCode = '这里替换成存货编码'
)
THEN '有效'
ELSE '无效'
END AS 结果;如果你想顺便看这个表到底有哪些字段,先跑这个最保险:
SELECT TOP 20 *
FROM Inventory;或者专门查字段名:
SELECT
a.name AS 字段名
FROM sys.columns a
WHERE a.object_id = OBJECT_ID('Inventory')
ORDER BY a.column_id;如果你要判断“可用”而不只是“存在”,不同 U8 库字段名可能不一样,常见要再看这些字段是否存在:
bInvCombPurchasebSalebSelfbProxyForeign- 以及可能存在的停用/档案状态字段
你可以先把这条发我结果,我帮你改成你这个账套的准确 SQL:
SELECT
a.name AS 字段名
FROM sys.columns a
WHERE a.object_id = OBJECT_ID('Inventory')
ORDER BY a.column_id;如果你愿意,我下一条可以直接给你一版 “自动兼容字段是否存在”的 U8 SQL。 user: 你直接去帮我查,存货代码如下: 2305250021 2307030002 2305230011 2305330011 2305050029 2305030062 assistant: 我直接帮你查了,在 UFDATA_101_2018(吉信隆账套)里这 6 个存货编码都存在。
查询结果如下:
1、2305030062 :M640马车螺杆-兰白锌;规格:M640mm;计量单位编码:10002;采购=是;销售=是;自制=否;启用日期:2025-05-26;
2、2305050029 :M640十字平头法兰螺杆;规格:M640mm;计量单位编码:10002;采购=是;销售=是;自制=否;启用日期:2025-05-26;
3、2305230011 :616兰白锌垫片;规格:616mm;计量单位编码:10002;采购=是;销售=是;自制=否;启用日期:2000-01-01;
4、2305250021 :L型4孔铁片;规格:87252.0mm;计量单位编码:10002;采购=否;销售=是;自制=是;启用日期:2000-01-01;
5、2305330011 :开口扳手10;规格:空;计量单位编码:10002;采购=是;销售=是;自制=否;启用日期:2025-06-20;
6、2307030002 :钢丝线圈;规格:?1.5*150mm 头部直径为5mm;计量单位编码:10004;采购=是;销售=是;自制=否;启用日期:2024-07-25;
补一句你可能会关心的点:
- 这 6 个编码都“存在”,所以按存在性判断是有效的。
- 但 2305330011 的启用日期是 2025-06-20,如果你们业务里要求“当前日期已到启用日才能用”,那它在启用日前要额外留意。
如果你要,我可以下一条直接给你整理一版 “批量校验存货编码是否存在/是否到启用日期”的标准 SQL,你以后可以自己直接贴进 U8 查。 user: 给我批量更改启用日期的sql语句,启用日期设置为2000-01-01 assistant: 可以,直接用这条:
UPDATE Inventory
SET dSDate = '2000-01-01'
WHERE cInvCode IN (
'2305250021',
'2307030002',
'2305230011',
'2305330011',
'2305050029',
'2305030062'
);建议你先先用这条确认一下再执行更新:
SELECT
cInvCode AS 存货编码,
cInvName AS 存货名称,
dSDate AS 启用日期
FROM Inventory
WHERE cInvCode IN (
'2305250021',
'2307030002',
'2305230011',
'2305330011',
'2305050029',
'2305030062'
)
ORDER BY cInvCode;如果想更稳一点,可以用事务版:
BEGIN TRAN;
UPDATE Inventory
SET dSDate = '2000-01-01'
WHERE cInvCode IN (
'2305250021',
'2307030002',
'2305230011',
'2305330011',
'2305050029',
'2305030062'
);
SELECT
cInvCode AS 存货编码,
cInvName AS 存货名称,
dSDate AS 启用日期
FROM Inventory
WHERE cInvCode IN (
'2305250021',
'2307030002',
'2305230011',
'2305330011',
'2305050029',
'2305030062'
)
ORDER BY cInvCode;
-- 确认无误后执行
COMMIT TRAN;
-- 如果不想保存就改成
-- ROLLBACK TRAN;如果你要,我也可以顺手给你一版 只更新当前启用日期大于 2000-01-01 的 SQL。