Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie stelle ich einer IN-Anweisung eine Zeichenfolge mit einer Liste von Werten zur Verfügung?

Degan.

Sie müssen keine tatsächliche Tabelle erstellen. Sie können eine Tabellenwertfunktion verwenden und diese in Ihrer Abfrage verwenden, z. wie unten.

(DATEPART(dw, ThisDate) IN (SELECT [item] FROM dbo.fnSplit(@TheseDays, ',')))

Dies verwendet die TVF von http://www.eggheadcafe.com/ community/aspnet/13/10021854/fnsplit.aspx ).

CREATE FUNCTION dbo.fnSplit(
    @sInputList VARCHAR(8000) -- List of delimited items
  , @sDelimiter VARCHAR(8000) = ',' -- delimiter that separates items
) RETURNS @List TABLE (item VARCHAR(8000))

BEGIN
DECLARE @sItem VARCHAR(8000)
WHILE CHARINDEX(@sDelimiter,@sInputList,0) <> 0
 BEGIN
 SELECT
  @sItem=RTRIM(LTRIM(SUBSTRING(@sInputList,1,CHARINDEX(@sDelimiter,@sInputList,0)-1))),
  @sInputList=RTRIM(LTRIM(SUBSTRING(@sInputList,CHARINDEX(@sDelimiter,@sInputList,0)+LEN(@sDelimiter),LEN(@sInputList))))

 IF LEN(@sItem) > 0
  INSERT INTO @List SELECT @sItem
 END

IF LEN(@sInputList) > 0
 INSERT INTO @List SELECT @sInputList -- Put the last item in
RETURN
END
GO