C# 条件为false时使用左外部联接检索数据,否则为内部联接
在进程中,我需要根据条件检索数据 如果条件为false,我需要使用左外连接,但如果条件为true,我需要使用内连接 这就是我试过的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],
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);