我对写入数据库的SQL代码相当陌生。我一直试图自己编写这段代码,但我没有很多运气。特别是因为我真的不知道如何测试它没有实际写入数据库 我有一个数据库有5个UDF字段。 'UDF1-UDF5'。我的设施中的操作员应该将条码扫描到特定的条码字段中,该条码字段将条码分成五个字段(它们都是字符(30)字段)。不幸的是,他们正在直接扫描UDF1字段,因此整个条形码字符串都在一个字段中。 (我无法控制这个软件)我正在尝试编写一个脚本来解析数据库,将这些字段拆分成单独的变量并更新数据库。我可以使用一点帮助,因为我认为我需要动态SQL来做到这一点,而我对此不太了解。这里是关于系统的更多信息。SQL Server更新字段中连接字符串的字段
BARCODE域看起来是这样的:
%2S12345%1%1%0%10%
,其中“%”字符开始和结束的条码并连接所有的字符。第一个UDF字段'2'的第一个字符是一个校验位,并且总是相同的。 第一个字段始终为5或6个字符(不包括校验位),其余为1或2位数字。如果条形码只有前三个字段,我还需要代码不会中断。这里没有很多一致性。一些条形码被截断。
问题,
据我所知,只有这样,才能掰开级联文本串是基于位置(),所以我需要一个额外的5个变量得到各家之长字段和查询该信息的方式。有更容易的方法吗?
在某些时候,我必须有条件地设置变量,我似乎无法得到设置命令的工作。我明白为什么这样的东西不起作用,但我不知道有任何其他的做法。
。
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.一旦我能得到变量集我认为一个简单的条件update语句会的工作,但如果有别的尝试这个之前,我应该知道我将不胜感激的意见。再次
感谢,
丹
听起来像是你需要一个字符串分离器。这里有几个很棒的选择。 http://sqlperformance.com/2012/07/t-sql-queries/split-strings或者,如果你在SQL服务器2016年有一个很好的新闪亮建成一个。 https://msdn.microsoft.com/en-us/library/mt684588.aspx –
感谢您的链接,不幸的是,我不是数据库管理员(好像这不是显而易见的:)),获得类似实现的东西可能很难。 – mreff555
获取字符串拆分器应该非常简单。特别是如果你与你的DBA交谈并告诉他们另一个选择是使用动态sql循环。如果没有分配器,这将会很糟糕。 –