gpt4 book ai didi

sql - 使用逗号分隔值的 MS SQL 更新语句

转载 作者:行者123 更新时间:2023-12-03 22:52:17 25 4
gpt4 key购买 nike

我正在尝试创建一个 SQL 更新语句,该语句将读取文本框字段中的逗号分隔值并使用这些逗号分隔值更新表(1 列引用 ID)。

具体来说,我有一个产品表,我想创建一个表单来更新该表中的“库存”列。

我每天更新我的库存电子表格,如果我可以将我所有产品的库存 CSV 复制/粘贴到文本框点击更新并实现我的表格,那就太好了。

我不确定如何执行此操作,因为我需要引用每个产品的唯一 ID 并使用库存库存的匹配值更新该 ID。

非常感谢任何想法、示例。

最佳答案

如果您使用的是 SQL Server 2016,那么您可以按照我在上面的评论中所述使用 string_split

select * from string_split('1,2,3,4,5',',')

但是:

如果您使用的是 sql server < 2016 的早期版本,那么您可以创建一个返回表的函数,然后您可以从那里连接到您需要更新的表:

CREATE FUNCTION dbo.SplitStringToValues
(
@List NVARCHAR(MAX),
@Delimiter NVARCHAR(255)
)
RETURNS TABLE
WITH SCHEMABINDING AS
RETURN
WITH E1(N) AS ( SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1
UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1
UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1),
E2(N) AS (SELECT 1 FROM E1 a, E1 b),
E4(N) AS (SELECT 1 FROM E2 a, E2 b),
E42(N) AS (SELECT 1 FROM E4 a, E2 b),
cteTally(N) AS (SELECT 0 UNION ALL SELECT TOP (DATALENGTH(ISNULL(@List,1)))
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM E42),
cteStart(N1) AS (SELECT t.N+1 FROM cteTally t
WHERE (SUBSTRING(@List,t.N,1) = @Delimiter OR t.N = 0))
SELECT Item = SUBSTRING(@List, s.N1, ISNULL(NULLIF(CHARINDEX(@Delimiter,@List,s.N1),0)-s.N1,8000))
FROM cteStart s;
go

然后像这样使用函数

SELECT * FROM SplitStringToValues('1,2,3,5',',') as t

更新:

要按照您在评论中的要求获取 id 旁边的下一行值,您可以执行以下类似操作。它使用了 SQL SERVER 2012 中引入的 LEAD 函数:

SELECT Id, Value
FROM (SELECT
ROW_NUMBER() over (order by(select 1)) as cnt,
t.item AS Id,
Lead(t.item)
OVER (
ORDER BY (SELECT 1)) Value
FROM dbo.Splitstringtovalues('10,20,30,40,50,10,20,30,40,50,60,70', ',')
t)
keyValue
WHERE keyValue.value IS NOT NULL
and cnt % 2 = 1

关于sql - 使用逗号分隔值的 MS SQL 更新语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39536404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com