Я пытаюсь выполнить sp_executesql
внутри хранимой процедуры. Когда я выполняю хранимую процедуру, она выдает следующую ошибку
Сообщение 8114, Уровень 16, Состояние 5, Строка 0
Ошибка преобразования типа данных varchar в int
Я не мог понять, где происходит ошибка
Вот моя хранимая процедура
ALTER PROCEDURE [dbo].[spHoldTransaction]
@RegisterNo INT,
@StoreID INT,
@Department VARCHAR(50),
@TransactionDateFrom DATE,
@TransactionDateTo DATE,
@Comment VARCHAR(50)
AS
BEGIN
DECLARE @DatabaseName VARCHAR(15);
IF (@StoreID = 5555)
BEGIN
SET @DatabaseName = 'xxx'
END
SET @Department=''''+REPLACE(@Department,',',''',''')+''''
DECLARE @HoldEntryQry NVARCHAR(MAX);
DECLARE @HoldEntryParamDefinition NVARCHAR(MAX);
SET @HoldEntryParamDefinition = N'@Department VARCHAR(50),@StoreID INT,@NewId INT,@TransactionDateFrom DATETIME,@TransactionDateTo DATETIME'
DECLARE @NewId INT;
SET @NewID = 15;
SET @HoldEntryQry = 'SELECT te.StoreID, ' + CONVERT(VARCHAR(MAX), @NewId) + ' AS TransactionHoldID,
te.ItemLookupCode,
item.Description,
te.ItemID,
SUM(te.Quantity) Quantity,
SUM(te.SalesTax) Tax,
SUM(te.Price * te.Quantity) Value,
SUM(te.Price * te.Quantity) / SUM(te.Quantity) Price,
item.price FullPrice,
--1 AS Taxable,
GETDATE() AS TransactionTime,
''1899-12-30'' AS VoucherExpirationDate
FROM
TransactionEntry te
LEFT JOIN
item ON item.id = te.ItemID
INNER JOIN
item nItem ON nitem.ItemLookupCode = item.itemlookupcode
WHERE
te.TransactionDate >= ''' + CONVERT(VARCHAR, CAST(@TransactionDateFrom AS DATE), 102) +
''' AND te.TransactionDate <= ''' +
CONVERT(VARCHAR, CAST(@TransactionDateTo AS DATE), 102) +
''' AND item.department IN (' + @Department + ')
AND te.storeid = ' + convert(varchar(max), @StoreID)+'
group by
te.StoreID,
te.ItemLookupCode,
item.Description,
te.ItemID,
item.price
'
EXECUTE sp_executesql @HoldEntryQry, @HoldEntryParamDefinition, @NewId, @Department, @Storeid,@TransactionDateFrom, @TransactionDateTo
END
Когда я делаю Print @HoldEntryQry
, запрос выглядит следующим образом
select
te.StoreID,
15 AS TransactionHoldID,
te.ItemLookupCode,
item.Description,
te.ItemID,
sum(te.Quantity) Quantity,
sum(te.SalesTax) Tax,
sum(te.Price * te.Quantity) Value,
sum(te.Price * te.Quantity)/sum(te.Quantity) Price,
item.price FullPrice,
1 AS Taxable,
Getdate() AS TransactionTime,
'1899-12-30' AS VoucherExpirationDate
from
TransactionEntry te
left join item on item.id = te.ItemID
inner join item nItem on nitem.ItemLookupCode = item.itemlookupcode
where
te.TransactionDate >= '2018.04.16' and te.TransactionDate <='2018.04.30' and item.department in ('Apple','Orange','Dates') and te.storeid = 5555
group by
te.StoreID,
te.ItemLookupCode,
item.Description,
te.ItemID,
item.price
Распечатанный запрос возвращает ожидаемый результат