我有一个存储过程,我想在Web API(C#)中使用它的结果。
我必须错过一些东西,因为我没有结果,也没有Complex Types
中的Functions Imports
(在EF模型中)(我可以在Functions Imports
中看到存储过程,但是它没有返回任何值,如预期的那样。)
这是我的存储过程(为了简化起见,我已经删除了一些不重要的数据)
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
@main_id BIGINT,
@id_ze_mish BIGINT,
@id_nof BIGINT,
@loggedInUser VARCHAR(20)
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
BEGIN TRANSACTION [TransactionUniteSingles]
OPEN SYMMETRIC KEY io_key DECRYPTION BY CERTIFICATE chn_cert
-- Step 1
UPDATE [dbo].[t1]
SET deleted = 1,
WHERE id_nof = @id_nof
AND id_ze = @id_ze_mish
-- Step 2
UPDATE [dbo].[t_no_nir]
SET update_stamp = GETDATE(),
[user_name] = @loggedInUser
WHERE id_nof = @id_nof
AND ms_zehut_mazmin = @id_ze_mish
-- Step 3
CREATE TABLE #mainPrice
(
id INT,
fName VARCHAR(20),
lName VARCHAR(20)
)
INSERT INTO #mainPrice
EXEC [dbo].[io_sp_get_some_data_foo] @id
IF(EXISTS(select * from #mainPrice))
BEGIN
DECLARE @totalAmount INT;
SELECT @totalAmount = (main_price + price_tip + price_visa)
FROM #mainPrice
DROP TABLE #mainPrice
UPDATE [dbo].[t_4]
SET amount = @totalAmount,
update_stamp = GETDATE(),
[user_name] = @loggedInUser
WHERE id_nof = @id_nof
AND id = @main_id
CLOSE ALL SYMMETRIC KEYS
COMMIT TRANSACTION [TransactionUniteSingles]
SELECT CAST(1 as BIT) as 'Status', 'Succeeded' as 'ReturnMessage'
END
ELSE
BEGIN
SELECT CAST(0 as BIT) as 'Status', 'ADMIN - Unite Singles as 'ReturnMessage'
END
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION [TransactionUniteSingles]
SELECT CAST(0 as BIT) as 'Status', 'ADMIN - Unite Singles' as 'ReturnMessage'
END CATCH
END
请注意-以独立方式运行存储过程时,它可以完美运行并返回预期的结果。
答案 0 :(得分:0)
检查使用NULL输入参数调用过程时会发生什么。如果结果不是表,则EF将不会生成复杂结果。
答案 1 :(得分:0)
尝试以下操作:
-- declare table at SP begin
DECLARE @ResultTable TABLE(
Status BIT NOT NULL,
ResultMessage NVARCHAR(50) NOT NULL
)
-- insert data where you need
INSERT INTO @ResultTable
(
Status,
ResultMessage
)
VALUES
( NULL, -- Status - bit
N'' -- ResultMessage - nvarchar(50)
)
-- at SP end select result from table
SELECT * FROM @ResultTable
答案 2 :(得分:0)
我发现我的问题出在我的临时表上。
当在我的SP的顶部或临时表的上方(在我的情况下为SET FMTONLY OFF
)上使用#mainPrice
时,一切都像一个超级按钮,Complex Types
突然显示了我的SP。
另一种解决方案是使用变量表:DECLARE TABLE @mainPrice
。
两者都可以完成工作。
我很高兴知道为什么会发生这种情况以及为什么C#拒绝将临时表作为我的SP的一部分,但此刻我找到了所需的解决方案。