を一覧表示することは、これを気に入っています。それ、どうやったら出来るの?は、私は車でリストを持って、SQL Serverのテーブルから複数の行を取得し、それらに
私はこの関数を挿入しています
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[SplitString]
(@pString NVARCHAR(4000), @pDelimiter NCHAR(1))
RETURNS TABLE WITH SCHEMABINDING AS
RETURN
WITH E1(N) AS (
SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1
), --10E+1 or 10 rows
E2(N) AS (SELECT 1 FROM E1 a, E1 b), --10E+2 or 100 rows
E4(N) AS (SELECT 1 FROM E2 a, E2 b), --10E+4 or 10,000 rows max
cteTally(N) AS (--==== This provides the "base" CTE and limits the number of rows right up front
-- for both a performance gain and prevention of accidental "overruns"
SELECT TOP (ISNULL(DATALENGTH(@pString),0)) ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM E4
),
cteStart(N1) AS (--==== This returns N+1 (starting position of each "element" just once for each delimiter)
SELECT 1 UNION ALL
SELECT t.N+1 FROM cteTally t WHERE SUBSTRING(@pString,t.N,1) = @pDelimiter
),
cteLen(N1,L1) AS(--==== Return start and length (for use in substring)
SELECT s.N1,
ISNULL(NULLIF(CHARINDEX(@pDelimiter,@pString,s.N1),0)-s.N1,8000)
FROM cteStart s
)
--===== Do the actual split. The ISNULL/NULLIF combo handles the length for the final element when no delimiter is found.
SELECT ItemNumber = ROW_NUMBER() OVER(ORDER BY l.N1),
Item = SUBSTRING(@pString, l.N1, l.L1)
FROM cteLen l
WHERE SUBSTRING(@pString, l.N1, l.L1) <> ''
;
GO
と、このストアドプロシージャを作成:
Alter Procedure [db_ddladmin].[spGetVehicles]
(
@ECU nvarchar(20),
@Identifiers nvarchar(20)
)
AS
Begin
SELECT *
FROM db_ddladmin.View_VehicleReadouts
WHERE ECU IN (SELECT Item FROM [dbo].[SplitString](@ECU,','))
AND Identifier IN (SELECT Item FROM [dbo].[SplitString](@Identifiers, ','))
END
をそして、私はこのクエリによって、このストアドプロシージャを実行します。
EXEC [db_ddladmin].[spGetVehicles] @ECU = 'EBS7,ALM1', @Identifiers = '88'
私が手それらのECUと識別子を含むすべての車両のリスト。しかし、私がそこに書いたECUの両方を持っている車両を表示したいだけで、それらのECUのうちの1つしか持っていない車両は表示したくないということです。それ、どうやったら出来るの?
「車両」という列はありません。車両を特定するものは何ですか? –
車両にはさまざまなECUが含まれています。これらの異なるECUは、88,89などの異なる番号を使用して識別できます。上記の図に示すように、車両には常に名前(この場合は「aamir」)があります。 Aamirには、各ECUが5つの異なる識別子を持つ約20種類のECUが含まれています。 –