2015-05-12 52 views
0

我有这个UDF,它需要从GUI中收集一些参数。用函数返回值参数调用存储过程ADO.NET

CREATE FUNCTION [dbo].[fnCreateAppoitmentXML] (@PacientID int 
, @DataProgramare datetime2(7) 
, @PacientNume varchar(50) 
, @PacientEmail varchar(100) 
, @PacientTelefon varchar(50) 
, @PacientSimptome varchar(100)) 
RETURNS xml 

AS 
BEGIN 


    RETURN (SELECT (SELECT 
     @PacientId AS PacientId, 
     @DataProgramare AS DataProgramare, 
     @PacientNume AS PacientNume, 
     @PacientEmail AS PacientEmail, 
     @PacientTelefon AS PacientTelefon, 
     @PacientSimptome AS PacientSimptome 
    FOR 
    xml PATH ('PacientDate'), 
    TYPE) 
    FOR xml PATH (''), 
    ROOT ('root')) 
END 

从MVC 5项目,我需要下面的SP,其采用XML作为参数(函数的返回类型)

@xmldoc xml 
AS 
BEGIN 
    BEGIN TRANSACTION 
    BEGIN TRY 
     INSERT INTO [dbo].[ProgramareMF] (PacientID, DataProgramare, PacientNume, PacientEmail, PacientTelefon, PacientSimptome) 
     (SELECT 
      xmldoc.i.value('./PacientId[1]', 'int'), 
      xmldoc.i.value('./DataProgramare[1]', 'datetime2(7)'), 
      xmldoc.i.value('./PacientNume[1]', 'varchar(100)'), 
      xmldoc.i.value('./PacientEmail[1]', 'varchar(100)'), 
      xmldoc.i.value('./PacientTelefon[1]', 'varchar(100)'), 
      xmldoc.i.value('./PacientSimptome[1]', 'varchar(100)') 
     FROM @xmldoc.nodes('/root/PacientDate') AS xmldoc (i)) 
    COMMIT TRAN; 
    END TRY 
    BEGIN CATCH 
    IF @@TRANCOUNT > 0 
     ROLLBACK TRAN; 
    THROW; 
    END CATCH; 
END 

我的第一个问题是,我可以在.NET跑了SP调用并以UDF返回值作为参数提供给它。如果这是可能的,我应该将函数的返回值存储到一个变量中,或者直接提供带有UDF的SP作为参数?

回答

1

你不能发送udf。这是SQL,而不是C#。
但是你可以发送udf的名字和它应该得到的参数,并直接从存储过程运行它。 但是,在这种情况下,您可以一起跳过udf,只需将参数发送到存储过程即可。

+0

我需要使用XML,这些是规格...将做一些头脑风暴,并附带一些信息,谢谢 –

相关问题