我要做的是我有一个包含1个或更多值的字符串数组。当我将这些值传递给sql时,我试图检查每个值上的一个字段,如果它包含pass或fail。我能够一对一地做到这一点。但现在要求是需要同时检查多个值或ID。我真的不确定从哪个开始。大多数文章建议将信息存储在表格中。由于部分数据已经失败,因此排名前1的原因。所以我正在寻找最近的失败者
这是检查一个ID的SQL:
declare @PTSID nvarchar(1000) = '7VD6GSZG, 8V9WKX78, DOJUSEM8'
但是说我有类似的东西
p_id | insp_status
7VD6GSZG fail
8V9WKX78 fail
DOJUSEM8 pass
如何检查列检查状态的每个ID? 所以理想情况下,我喜欢像
这样的东西import sys
try:
# Program here
except KeyboardInterrupt:
# Close connections
sys.exit(0)
答案 0 :(得分:1)
创建一个函数将字符串更改为表格,如下所示:
CREATE FUNCTION [dbo].[function_string_to_table]
(
@string VARCHAR(MAX),
@delimiter CHAR(1)
)
RETURNS @output TABLE(
data VARCHAR(256)
)
BEGIN
DECLARE @start INT, @end INT
SELECT @start = 1, @end = CHARINDEX(@delimiter, @string)
WHILE @start < LEN(@string) + 1 BEGIN
IF @end = 0
SET @end = LEN(@string) + 1
INSERT INTO @output (data)
VALUES(SUBSTRING(@string, @start, @end - @start))
SET @start = @end + 1
SET @end = CHARINDEX(@delimiter, @string, @start)
END
RETURN
END
然后像这样加入你的桌子:
declare @PTSID nvarchar(1000) = '7VD6GSZG, 8V9WKX78, DOJUSEM8'
select *, CASE WHEN CHECKT.data is null THEN 'false' ELSE 'true' END as dataExists
from Insp_Results R
LEFT JOIN [dbo].[function_string_to_table](@PTSID, ',') CHECKT ON CHECKT.data = R.RESV_PTSID
答案 1 :(得分:-2)
您可以使用SQL IN条件。语法为:
expression IN (value1, value2, .... value_n);
所以在你的情况下它可能是这样的:
declare @PTSID = nvarchar(1000);
SET @PTSID = '7VD6GSZG, 8V9WKX78, DOJUSEM8';
Select top (1)
p_id,
insp_status
from Insp_Results
where RESV_PTSID IN @PTSID
order by RESD_DATE desc