C# 条件为false时使用左外部联接检索数据,否则为内部联接

C# 条件为false时使用左外部联接检索数据,否则为内部联接,c#,sql,sql-server,C#,Sql,Sql Server,在进程中,我需要根据条件检索数据 如果条件为false,我需要使用左外连接,但如果条件为true,我需要使用内连接 这就是我试过的 ALTER PROCEDURE [dbo].[GetFooBarData] @UDT VarcharUDT readonly AS BEGIN DECLARE @IsUDTNull BIT SELECT @IsUDTNull = ISNULL((SELECT TOP 1 1 FROM @UDT),0) SELECT [Foo],

在进程中,我需要根据条件检索数据

如果条件为false,我需要使用左外连接,但如果条件为true,我需要使用内连接

这就是我试过的

ALTER PROCEDURE [dbo].[GetFooBarData]    
@UDT VarcharUDT readonly
AS BEGIN    

DECLARE @IsUDTNull BIT
SELECT @IsUDTNull = ISNULL((SELECT TOP 1 1 FROM @UDT),0)

SELECT [Foo], 
       [Bar]
  FROM [dbo].[FooBar] FB
  LEFT OUTER JOIN @UDT T ON @IsUDTNull = 0 OR FB.Foo LIKE '%' + T.Item + '%'
END
我这样称呼proc

DECLARE @sa VarcharUDT

INSERT INTO @sa (Item)
SELECT 'XS0995537155'

DECLARE @return_value int

EXEC    @return_value = [dbo].[GetFooBarData]
        @UDT = @sa

SELECT  'Return Value' = @return_value

GO
即使UDT包含值,也会返回所有数据

UDT


如果要在一条语句中执行此操作,请使用
LEFT JOIN
并检查
WHERE
子句中的条件:

SELECT [Foo], [Bar]
FROM [dbo].[FooBar] FB LEFT OUTER JOIN
      @UDT T 
      ON FB.Foo LIKE '%' + T.Item + '%'
WHERE (@UseLeftJoin = 1) OR (T.Item IS NOT NULL);

加一。用于获取数据。
SELECT [Foo], [Bar]
FROM [dbo].[FooBar] FB LEFT OUTER JOIN
      @UDT T 
      ON FB.Foo LIKE '%' + T.Item + '%'
WHERE (@UseLeftJoin = 1) OR (T.Item IS NOT NULL);