0
Эта моя хранимая процедура и параметры, но мне нужно сделать динамический поискSQL Server присоединиться хранимая процедура
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)
Но я попробовал это то, что я делаю, когда Есть несколько где? Я не мог :(
Спасибо
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'
ли отличное от @VesselID действительно нужно? –
@JamesZ Я думаю, что нужно уметь конкатрировать строку и целое число. То же самое можно сказать о всех других параметрах, которые были введены. – jpw
Я неправильно понял или вы отредактировали это ... Я думаю, что переменные должны быть в SQL текст вместо значений и значений, заданных отдельно для sp_execute_sql? –