如何在SQL Server 2014中将动态多个输入值传递给LIKE运算符?

问题描述 投票:1回答:1

我需要将输入参数值传递给LIKE运算符,以用于表BillOfMaterials中名为BillOfMaterialsID的列。如果我们想对值进行硬编码,我们将使用OR运算符,如下所示,

SELECT *
     FROM [AdventureWorks2017].[Production].[BillOfMaterials]
     Where StartDate>='2010-05-26 00:00:00.000' and StartDate<'2010-07-08 00:00:00.000'
     AND (BillOfMaterialsID LIKE '%' + '308' + '%' OR BillOfMaterialsID LIKE '%' + '335' + '%' OR BillOfMaterialsID LIKE '%' + '27' + '%')

但是,如果输入值是根据输入筛选器值动态变化的,那么我们将如何在SQL Server中处理此类条件?

例如,我在报表应用程序中有3个输入参数,显示开始日期时间,结束日期时间和BillOfMaterialsID。在“日历选择”中将选择“开始日期时间”和“结束日期时间”值,并为输入BillOfMaterialsID而设置了文本框。

因此,无论我们以逗号分隔输入什么代码,所有值都应分别应用于查询条件和应通过的SQL语句中从应用程序到数据库将如下所示,

SELECT *
 FROM [AdventureWorks2017].[Production].[BillOfMaterials]
 Where StartDate>='2010-05-26 00:00:00.000' and StartDate<'2010-07-08 00:00:00.000'
 AND (BillOfMaterialsID LIKE '%' + '308' + '%' OR BillOfMaterialsID LIKE '%' + '335' + '%' OR BillOfMaterialsID LIKE '%' + '27' + '%')

ELSE任何方式都受到了我的高度赞赏,因为我对此抱有逻辑。

CREATE TABLE [Production].[BillOfMaterials](
    [BillOfMaterialsID] [int] IDENTITY(1,1) NOT NULL,
    [ProductAssemblyID] [int] NULL,
    [ComponentID] [int] NOT NULL,
    [StartDate] [datetime] NOT NULL,
    [EndDate] [datetime] NULL,
    [UnitMeasureCode] [nchar](3) NOT NULL,
    [BOMLevel] [smallint] NOT NULL,
    [PerAssemblyQty] [decimal](8, 2) NOT NULL,
    [ModifiedDate] [datetime] NOT NULL
)

INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (893, NULL, 749, CAST(N'2010-05-26T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-05-12T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (271, NULL, 750, CAST(N'2010-03-04T00:00:00.000' AS DateTime), CAST(N'2010-05-03T00:00:00.000' AS DateTime), N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-05-03T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (34, NULL, 750, CAST(N'2010-05-04T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-04-20T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (830, NULL, 751, CAST(N'2010-05-26T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-05-12T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (2074, NULL, 752, CAST(N'2010-07-08T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-06-24T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (1950, NULL, 753, CAST(N'2010-06-19T00:00:00.000' AS DateTime), CAST(N'2010-08-18T00:00:00.000' AS DateTime), N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-08-18T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (1761, NULL, 753, CAST(N'2010-08-19T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-08-05T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (3088, NULL, 754, CAST(N'2010-12-15T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-12-01T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (3351, NULL, 755, CAST(N'2010-12-23T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-12-09T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (3246, NULL, 756, CAST(N'2010-12-23T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-12-09T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (2760, NULL, 757, CAST(N'2010-09-15T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-09-01T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (2395, NULL, 758, CAST(N'2010-08-05T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-07-22T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (3087, NULL, 759, CAST(N'2010-12-15T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-12-01T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (3350, NULL, 760, CAST(N'2010-12-23T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-12-09T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (2822, NULL, 761, CAST(N'2010-09-15T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-09-01T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (3245, NULL, 762, CAST(N'2010-12-23T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-12-09T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (2759, NULL, 763, CAST(N'2010-09-15T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-09-01T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (2394, NULL, 764, CAST(N'2010-08-05T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-07-22T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (3341, NULL, 765, CAST(N'2010-12-23T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-12-09T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (2815, NULL, 766, CAST(N'2010-09-15T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-09-01T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (2449, NULL, 767, CAST(N'2010-08-05T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-07-22T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (2899, NULL, 768, CAST(N'2010-09-15T00:00:00.000' AS DateTime), CAST(N'2010-11-14T00:00:00.000' AS DateTime), N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-11-14T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (2738, NULL, 768, CAST(N'2010-11-15T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-11-01T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (2363, NULL, 769, CAST(N'2010-08-05T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-07-22T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (1265, NULL, 770, CAST(N'2010-06-09T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-05-26T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (1195, NULL, 771, CAST(N'2010-06-09T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-05-26T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (3017, NULL, 772, CAST(N'2010-12-15T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-12-01T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (3281, NULL, 773, CAST(N'2010-12-23T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-12-09T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (2783, NULL, 774, CAST(N'2010-09-15T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-09-01T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (5, NULL, 775, CAST(N'2010-03-04T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-02-18T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (2737, NULL, 776, CAST(N'2010-09-15T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-09-01T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (2362, NULL, 777, CAST(N'2010-08-05T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-07-22T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (1264, NULL, 778, CAST(N'2010-06-09T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-05-26T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (1642, NULL, 779, CAST(N'2010-06-19T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-06-05T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (393, NULL, 780, CAST(N'2010-03-18T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-03-04T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (52, NULL, 781, CAST(N'2010-03-04T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-02-18T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (3217, NULL, 782, CAST(N'2010-12-23T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-12-09T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (808, NULL, 783, CAST(N'2010-05-26T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-05-12T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (2049, NULL, 784, CAST(N'2010-07-08T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-06-24T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (4, NULL, 785, CAST(N'2010-03-04T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-02-18T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (2736, NULL, 786, CAST(N'2010-09-15T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-09-01T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (2361, NULL, 787, CAST(N'2010-08-05T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-07-22T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (1263, NULL, 788, CAST(N'2010-06-09T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-05-26T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (3247, NULL, 789, CAST(N'2010-12-23T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-12-09T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (2761, NULL, 790, CAST(N'2010-09-15T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-09-01T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (2396, NULL, 791, CAST(N'2010-08-05T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-07-22T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (3089, NULL, 792, CAST(N'2010-12-15T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-12-01T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (2739, NULL, 793, CAST(N'2010-09-15T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-09-01T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (2364, NULL, 794, CAST(N'2010-08-05T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-07-22T00:00:00.000' AS DateTime))
    GO
    INSERT [Production].[BillOfMaterials] ([BillOfMaterialsID], [ProductAssemblyID], [ComponentID], [StartDate], [EndDate], [UnitMeasureCode], [BOMLevel], [PerAssemblyQty], [ModifiedDate]) VALUES (1266, NULL, 795, CAST(N'2010-06-09T00:00:00.000' AS DateTime), NULL, N'EA ', 0, CAST(1.00 AS Decimal(8, 2)), CAST(N'2010-05-26T00:00:00.000' AS DateTime))
    GO
sql-server dynamic sql-like
1个回答
1
投票

使用表变量传递参数。

...
DECLARE @billofmaterialsids TABLE
                            (billofmaterialsid integer);
INSERT INTO @billofmaterialsids
            (billofmaterialsid)
            VALUES (<billofmaterialsid_1>),
                   ...
                   (<billofmaterialsid_n>);
...

([<billofmaterialsid_1><billofmaterialsid_n>当然需要替换为所需的值。]

然后,在查询中,您可以使用EXISTS和相关子查询来检查是否与传递的值相匹配。

...
FROM billofmaterials bom
...
WHERE EXISTS (SELECT *
                     FROM @billofmaterialsids bomi
                     WHERE bom.billofmaterialsid LIKE '%' + bomi.billofmaterialsid + '%')
...
© www.soinside.com 2019 - 2024. All rights reserved.