我有一种情况,我正在解析varchar值以提取数字,我必须更新我的表以将数值放入我的表中的新字段。我已将字符串解析封装到存储过程中。现在我正在尝试编写更新语句。
我的表格如下(简化为仅显示键值):
CREATE TABLE dbo.oper_pacer
(
oper_pacer_id int NOT NULL,
oper_pacer_fluroscopy varchar(20) NULL,
oper_pacer_fluoro_min float NULL
)
我的函数接受一个varchar(20)值并返回一个float,进行数字的解析和转换:
CREATE FUNCTION usf_ParseFluoro(
@parm1 VARCHAR(20)
)
RETURNS FLOAT
AS
BEGIN
DECLARE @value VARCHAR(20)
DECLARE @midVal VARCHAR(20)
DECLARE @nPos INT
DECLARE @lPos INT
SELECT @midVal = SUBSTRING(@parm1, PATINDEX('%[0-9]%', @parm1), PATINDEX('%[0-9]%',@parm1) + LEN(@parm1)+1)
SELECT @value =
(CASE
WHEN PATINDEX('%[a-z]%', @midVal) = 0
THEN @midVal
ELSE RTRIM(SUBSTRING(@midVal, 1, PATINDEX('%[a-z]%', @midVal)-1))
END)
RETURN CONVERT(FLOAT, @value)
END
这是我的问题:
如何编写原始表的更新,循环,调用函数,并将返回值放入oper_pacer_fluoro_min,假设在T-SQL中没有办法为每个循环执行操作?
修改 一旦我创建了这个函数,Update就非常简单,只需要一点试验和错误:我需要输入dbo。函数的前缀,使其以我当前的数据库权限运行:
UPDATE oper_pacer SET oper_pacer_fluoro_min = dbo.usf_ParseFluoro(oper_pacer_fluroscopy)
答案 0 :(得分:2)
我认为你不能使用程序来做到这一点。我使用函数解决了类似的问题,我认为它也适用于你。您可能需要重新构建表(即使它位于临时表中),以便您可以使用该函数可用的所有必需数据元素。但是一旦你这样做,你的UPDATE语句只是输入字段上的函数调用。