【发布时间】:2015-04-24 01:04:42
【问题描述】:
这是我的存储过程和参数,但我需要进行动态搜索
SELECT
dbo.Invoices.*,
dbo.Vessels.Name AS VesselName,
dbo.Companies.Name AS CompanyName,
dbo.InvoiceTypes.Name AS InvoiceTypeName,
dbo.InvoiceItems.Name AS InvoiceItemName,
dbo.InvoiceItems.InvoiceItemID
FROM
dbo.Invoices
LEFT JOIN dbo.Vessels ON
dbo.Invoices.VesselID = dbo.Vessels.VesselID
INNER JOIN dbo.Companies ON
dbo.Invoices.CompanyID = dbo.Companies.CompanyID
LEFT JOIN dbo.InvoiceTypes ON
dbo.Invoices.InvoiceTypeID = dbo.InvoiceTypes.InvoiceTypeID
LEFT JOIN dbo.InvoiceVsInvoiceItems ON
dbo.Invoices.InvoiceID = dbo.InvoiceVsInvoiceItems.InvoiceID
LEFT JOIN dbo.InvoiceItems ON
dbo.InvoiceVsInvoiceItems.InvoiceItemID = dbo.InvoiceItems.InvoiceItemID
参数
@InvoiceItemID int,
@InvoiceTypeID int,
@VesselID int,
@PaidByID int,
@InvoiceNo NVarchar(50),
@CompanyID int,
@chkSearchInvoiceDate bit,
@chkSearchIsDueDate bit,
@chkSearchIsPaid bit,
@chkSearchReceived bit,
@chkSearchAmount bit,
@chkSearchInvoiceType bit,
@InvoiceFromDate DateTime,
@InvoiceToDate DateTime,
@FromDueDate DateTime,
@ToDueDate DateTime,
@FromAmount decimal(18,4),
@ToAmount decimal(18,4)
但是我试过了,当有多个where时我该怎么办?我不能:(
谢谢
Declare @SQLQuery AS NVarchar(4000)
Declare @ParamDefinition AS NVarchar(2000)
Set @SQLQuery = 'SELECT dbo.Invoices.*, dbo.Vessels.Name AS VesselName, dbo.Companies.Name AS CompanyName, dbo.InvoiceTypes.Name AS InvoiceTypeName,
dbo.InvoiceItems.Name AS InvoiceItemName, dbo.InvoiceItems.InvoiceItemID'
If @InvoiceItemID Is Not Null
Set @SQLQuery = @SQLQuery + 'FROM dbo.Invoices LEFT JOIN dbo.InvoiceItems ON dbo.InvoiceVsInvoiceItems.InvoiceItemID = dbo.InvoiceItems.InvoiceItemID WHERE dbo.InvoiceVsInvoiceItems.InvoiceItemID = @InvoiceItemID'
If @VesselID Is Not Null
Set @SQLQuery = @SQLQuery + 'LEFT JOIN dbo.Vessels ON dbo.Vessels.VesselID = dbo.Invoices.VesselID WHERE dbo.Invoices.VesselID = @VesselID'
If @InvoiceNo Is Not Null
Set @SQLQuery = @SQLQuery + 'WHERE dbo.Invoices.InvoiceNo = @InvoiceNo'
If @CompanyID Is Not Null
Set @SQLQuery = @SQLQuery + 'WHERE dbo.Invoices.CompanyID = @CompanyID'
If @chkSearchInvoiceDate > 0
Set @SQLQuery = @SQLQuery + 'WHERE Between @InvoiceFromDate and @InvoiceToDate'
If @chkSearchIsDueDate > 0
Set @SQLQuery = @SQLQuery + 'WHERE Between @FromDueDate and @ToDueDate'
If @chkSearchIsPaid > 0
Set @SQLQuery = @SQLQuery + 'WHERE dbo.Invoices.PaidBy = @PaidBy'
If @chkSearchReceived > 0
Set @SQLQuery = @SQLQuery + 'WHERE dbo.Invoices.InvoiceNo = @InvoiceNo'
【问题讨论】:
标签: sql sql-server stored-procedures dynamic