2

Id がコンマ区切りの文字列に存在するレコードを選択しようとしていますが、以下のクエリでは結果が返されません:

  SELECT * FROM [SellPost] WHERE CAST([AutoId] AS nchar(100)) 
   IN (SELECT [SellPostId] FROM [SellPostViewHistory]) -- SellPostId contains the delimited string 

ステートメント「SELECT [SellPostId] FROM [SellPostViewHistory]」は 19,20,21 を返し、クエリを

   SELECT * FROM [SellPost] WHERE CAST([AutoId] AS nchar(100)) 
   IN (19,20,21) 

できます。誰か親切にアドバイスしてください。ありがとう。

4

3 に答える 3

2

おそらくほとんどの人はすでにこれを知っていますが、それでもこれは解決策の1つです:

分割関数を作成します。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[Split](
  @delimited NVARCHAR(MAX),
  @delimiter NVARCHAR(100)
) RETURNS @t TABLE (id INT IDENTITY(1,1), val NVARCHAR(MAX))
AS
BEGIN
  DECLARE @xml XML
  SET @xml = N'<t>' + REPLACE(@delimited,@delimiter,'</t><t>') + '</t>'

  INSERT INTO @t(val)
  SELECT  r.value('.','varchar(MAX)') as item
  FROM  @xml.nodes('/t') as records(r)
  RETURN
END

使用法:

 DECLARE @SellPostIds nvarchar(MAX)
   SET @SellPostIds = (SELECT [SellPostId] FROM [SellPostViewHistory])

   SELECT * FROM [SellPost] WHERE CAST([AutoId] AS nchar(100)) 
   IN (SELECT val FROM dbo.Split(@SellPostIds, ','))
于 2013-08-03T03:49:22.773 に答える
0

テーブル分割への CSV が必要です。UDF で入力を文字列として受け取り、テーブルを返し、これらのテーブルに結合して IN 句を操作できます。

于 2013-08-03T03:46:11.213 に答える