4
在一個proc中,我需要根據條件檢索數據。當條件爲false時,用LEFT OUTER JOIN來回複數據INNER JOIN
如果這種情況是錯誤的,我需要使用左外部連接,但如果該條件爲真,我需要使用INNER JOIN。
這就是我試過的。
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
CREATE TYPE [dbo].[VarcharUDT] AS TABLE(
[Item] [varchar](100) NOT NULL,
PRIMARY KEY CLUSTERED
(
[Item] ASC
)WITH (IGNORE_DUP_KEY = OFF)
)
GO
加一。用它來獲取數據。 –