我有这张桌子:
-----------------------------------------------
code intvalue checkrole result
-----------------------------------------------
A01 14 A02-A03 true
A02 24 A04 false
A03 10 A04 false
A04 12 A02/2 true
我想根据列checkrole中描述的角色,用Excel或类似的查询来填充查询或sp的列结果?
我向所有人道歉,我错误地解释了自己。 例如: A01 14 A02-A03是 在这种情况下,我想解释角色并获得24-10 = 14,即为真
更新2: 大家好,感谢您的关注。 HABO,我正在朝着这个方向努力``将值代入表达式(“ 24-10”)....“:
TBL
code intValue checkRule result
A01 14 select A02-A03 from Table_1 NULL
A02 24 select A04 from Table_1 NULL
A03 10 select A04 from Table_1 NULL
A04 12 select A02 / 2 from Table_1 NULL
SP
CREATE PROCEDURE [dbo]. [Test]
AS
BEGIN
DECLARE @code VARCHAR (50)
DECLARE @intvalue INT
DECLARE @checkrule VARCHAR (50)
DECLARE @cTbl AS CURSOR
SET @cTbl = CURSOR FOR SELECT code
, intValue
, checkRule
FROM [dbo]. [Table_1]
OPEN @cTbl FETCH NEXT FROM @cTbl INTO @code, @intvalue, @checkrule
WHILE @@ FETCH_STATUS = 0
BEGIN
declare @statement nvarchar (4000), @Result int, @Parm nvarchar (20)
SET @statement = 'select @Result = 11 + 7'
SET @Parm = '@Result int output'
EXEC sp_executesql @statement, @Parm, @ Result OUT
print @Result
FETCH NEXT FROM @cTbl INTO @code, @intvalue, @checkrule
END
CLOSE @cTbl
DEALLOCATE @cTbl
END
更新3: 这就是我想要的。我不是专家,但是我会从错误中学习,我感谢那些教给我一些新知识的人,感谢所有参与其中的人,尤其是感谢HOBO,大家晚上好
答案 0 :(得分:0)
我可能会编写一个从您的checkRole创建值列表的函数(例如,它将为我提供A02-A04的列表“ A02”,“ A03”,“ A04”,然后使用其中包含“声明”
答案 1 :(得分:0)
使用显示的表格,您可以在下一个查询中更新结果列的值
UPDATE TableName
SET result = CASE
WHEN checkrole = 'A02-A03' THEN "true"
WHEN checkrole = 'A04' THEN "false"
WHEN checkrole = 'A02/2' THEN "true"
ELSE "setDefaultValue"
END
WHERE code in (A01,A02,A03,A04);
在最后一行指定要更新的行的代码值。如果您在列结果为空的情况下执行此查询,它将完成表并将结果存储为与您在上面发布的数据相同的数据。
(该查询在Mysql上运行良好)
答案 2 :(得分:0)
执行摘要:这是一个糟糕的主意。慢慢退后,没有人受伤。
免责声明:超出这一点,我对阅读后所需的任何治疗费用概不负责。
在更新2中,您似乎可以控制test = '"RT @Acosta: Trump defends his “very fine people” comments on Charlottesville: “People were there protesting the taking down of the monument…"'
mention = test.split('@')
person = mention[1].split(':')
print(person[0])
的格式。要求用户定界CheckRule
容易得多,例如使用Code
而不是'«A04»'
,而不是尝试使用TSQL查找它们。您无需担心诸如'A04'
为'A02'
时将66
替换为CheckRule
并获得'A026 - BA02'
的问题。
接下来的事情简直令人恐惧。它演示了采用带分隔符“变量”的表达式进行暴力破解的方法,例如'666 - B66'
,将每个“变量”的所有出现都替换为其整数值,评估结果表达式并检索结果。
它没有使用像游标那样令人讨厌的东西,而是使用两个嵌套的游标在'«A04»'
和CheckRule
之间移动。解析表达式中的“变量”并根据需要替换值会比使用“尝试一切”方法更为有效,但是TSQL在实现parsers方面并不擅长。
为了获得额外的荣誉,它也带来了拥抱SQL Injection的祝福。尝试使用Code
之类的CheckRule
。不要尝试像'A01; select 1 / 0;'
这样的人。
'-1; drop database LuckyGuess;'
如果不清楚,请不要。只是不要。