Я пытаюсь использовать функцию openrowset
в одной из моих пользовательских функций. он работает правильно, если я передал жесткий кодированный запрос в качестве параметра функции. Но он не работает, если я передал параметр запросу. Ниже приводится моя функция. Пожалуйста, руководство -Вызов Open Rowset в функции
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[fnGetOutstandingByCurrencyAsString]
(
@CustomerID INT
)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @Receipts VARCHAR(8000)
SET @Receipts=''
DECLARE @Result INT--, @Command VARCHAR(MAX)
--SET @Command='Exec spUpdateCustomerBilling 1,1'
--- Это не работает
SET @Result=(SELECT 1 from OPENROWSET('SQLNCLI11', 'Server=SERVERNAME;UID=username;Pwd=password;','Exec spUpdateCustomerBilling ' + @CustomerID +',1'))
--- Это работа
SET @Result=(SELECT 1 from OPENROWSET('SQLNCLI11', 'Server=SERVERNAME;UID=username;--Pwd=password;','Exec spUpdateCustomerBilling 1,1'))
SELECT @Receipts=COALESCE(CASE WHEN @Receipts<>''
THEN @Receipts+', '+CurrencyMaster.Code+' '+CONVERT(VARCHAR,Outstanding.Amount)
ELSE CurrencyMaster.Code+' '+CONVERT(VARCHAR,Outstanding.Amount) END,'')
FROM (SELECT * FROM dbo.fnGetOutstandingByCurrencyAsTable (@CustomerID)) Outstanding
INNER JOIN CurrencyMaster ON CurrencyMaster.CurrencyID=Outstanding.CurrencyID
RETURN @Receipts
END
Объявляет @sql varible с типом данных NVARCHAR (макс) – knkarthick24
использование EXEC не допускается в функциях –
Exec не разрешен в функциях, но он разрешен в хранимых процедурах, поэтому вы можете просто переписать свою функцию как хранимую процедуру, которая перенастраивает набор результатов. – knkarthick24