Вот моя процедура, созданная в SQL Server 2016.
CREATE PROCEDURE [dbo].[sp_getProductInfo]
@CompanyId VARCHAR(50) = '',
@ProductIds VARCHAR(max) = '',
@IsChange VARCHAR(100) = '0',
@PaymentOptionId VARCHAR(100) = '0',
@MetalTypeId VARCHAR(100) = '0',
@MetalGradeId VARCHAR(100) = '0',
@FullCutClarityId_P1 VARCHAR(100) = '0',
@SingleCutClarityId_P1 VARCHAR(100) = '0',
@IsconvertedToFullCut_P1 VARCHAR(100) = '0',
@FullCutClarityId_P2 VARCHAR(100) = '0',
@SingleCutClarityId_P2 VARCHAR(100) = '0',
@IsconvertedToFullCut_P2 VARCHAR(100) = '0'
AS
DECLARE @SQL VARCHAR(8000) = ''
BEGIN
SET NOCOUNT ON
SET @SQL = 'SELECT dbo.Product.Id, dbo.Product.ItemSku, dbo.Product.ProductName, dbo.Product.ParentSku, dbo.Product.Quantity,
(SELECT TotalProductPrice FROM dbo.fn_returnChangedB2BCost(dbo.Product.Id,'+@CompanyId+','+@IsChange+','+@PaymentOptionId+','+@MetalTypeId+','+@MetalGradeId+','+@FullCutClarityId_P1+','+@SingleCutClarityId_P1+','+@IsconvertedToFullCut_P1+','+@FullCutClarityId_P2+','+@SingleCutClarityId_P2+','+@IsconvertedToFullCut_P2+')) AS StandardPrice, dbo.Product.SalePrice
FROM dbo.Product
WHERE dbo.Product.CompanyId = '+@CompanyId+' AND dbo.Product.Id in(' + @ProductIds +')'
EXEC (@SQL)
END
и функция
CREATE FUNCTION [dbo].[fn_returnChangedB2BCost]
(@ProductId BIGINT = 0,
@CompanyId INT = 0,
@IsChangeByCritariya BIT = 0,
@PaymentOptionId INT = 0,
@MetalTypeId BIGINT = 0,
@MetalGradeId BIGINT = 0,
@FullCutClarityId_P1 BIGINT = 0,
@SingleCutClarityId_P1 BIGINT = 0,
@IsConvertedToFullCut_P1 BIT = 0,
@FullCutClarityId_P2 BIGINT = 0,
@SingleCutClarityId_P2 BIGINT = 0,
@IsConvertedToFullCut_P2 BIT = 0)
RETURNS @ReturnTable TABLE (TotalProductPrice DECIMAL(18, 4))
AS
BEGIN
INSERT INTO @ReturnTable (TotalProductPrice)
SELECT 120
RETURN
END
Теперь моя проблема в том, что когда я вызываю процедуру, возвращается ошибка, которая ..
Ошибка преобразования типа данных nvarchar в числовой.
Но вместо того, чтобы вводить "dbo.Product.Id" в функцию, когда я передаю прямой идентификатор продукта как ..
(SELECT TotalProductPrice FROM dbo.fn_returnChangedB2BCost(3596,'+@CompanyId+','+@IsChange+','+@PaymentOptionId+','+@MetalTypeId+','+@MetalGradeId+','+@FullCutClarityId_P1+','+@SingleCutClarityId_P1+','+@IsconvertedToFullCut_P1+','+@FullCutClarityId_P2+','+@SingleCutClarityId_P2+','+@IsconvertedToFullCut_P2+')) as StandardPrice
Тогда все работает нормально.
Я не могу найти решение. Пожалуйста, помогите.
Спасибо