【发布时间】:2016-10-17 15:31:45
【问题描述】:
我对写入数据库的 SQL 代码相当陌生。我一直在尝试自己编写这段代码,但我运气不佳。特别是因为我真的不知道如何在没有实际写入数据库的情况下测试它 我有一个包含 5 个 UDF 字段的数据库。 'UDF1-UDF5'。我工厂的操作员应该将条形码扫描到特定的条形码字段中,该字段将条形码分成五个字段(它们都是 char(30) 字段)。不幸的是,他们正在直接扫描 UDF1 字段,因此整个条形码字符串都在一个字段中。 (我无法控制这个软件)我正在尝试编写一个脚本来解析数据库,将这些字段拆分为单独的变量并更新数据库。我可以使用一些帮助,因为我认为我需要动态 SQL 来执行此操作,但我对此了解不多。以下是有关该系统的更多信息。
条形码字段如下所示:
%2S12345%1%1%0%10%
'%' 字符开始和结束条形码并连接字符的位置。第一个 UDF 字段“2”的第一个字符是校验位,并且始终相同。 第一个字段始终为 5 或 6 个字符(不包括校验位),其余为 1 或 2 位。如果条形码只有前三个字段,我还需要不会中断的代码。这里没有太多的一致性。部分条码被截断。
问题,
-
1234563信息。有没有更简单的方法?
有时我必须有条件地设置变量,但我似乎无法让设置命令工作。我理解为什么这样的事情不起作用,但我不知道有任何其他方法可以做到这一点。
.
DECLARE @BASEID CHAR(30), @LOTID CHAR(30), @SPLITID CHAR(30), @SUBID CHAR(30), @SEQUENCENO CHAR(30), @BASELEN INT
SET @BASELEN =
CASE WHEN(
SELECT ISNUMERIC(SUBSTRING(R.UDF1,3,1))
FROM VISION17SLITTER.DBO.ROLLINFO R
WHERE R.UDF1 LIKE '[%]%'
) = 1
THEN 5
ELSE 6
END
3。一旦我可以得到变量集,我假设一个简单的条件更新语句会起作用,但是如果在尝试之前我应该知道其他任何事情,我将不胜感激。
再次感谢,
丹
【问题讨论】:
-
听起来你需要一个字符串拆分器。这里有几个很棒的选择。 sqlperformance.com/2012/07/t-sql-queries/split-strings 或者,如果您使用的是 sql server 2016,则内置了一个不错的新闪亮。 msdn.microsoft.com/en-us/library/mt684588.aspx
-
感谢您的链接,不幸的是我不是数据库管理员(好像这并不明显:)),实现类似的东西可能很困难。
-
获取字符串拆分器应该非常简单。特别是如果您与 DBA 交谈并告诉他们另一个选择是使用带有动态 sql 的循环。如果没有分离器,这将是可怕的组合。
-
还是去问问 dba。
标签: sql sql-server concatenation