我有一个存储过程,我想在Web API(C#)中使用它的结果。我必须错过一些东西,因为我没有结果Complex Types
(在EF模型中),也没有Functions Imports
(我可以在其中看到存储过程,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
请注意-以独立方式运行存储过程时,它可以完美运行并返回预期的结果。
我发现我的问题出在我的临时表上。在SET FMTONLY OFF
SP的顶部或临时表上方(#mainPrice
以我的情况为例)使用时,所有内容都像吊饰一样工作,突然间Complex Types
显示了SP。
另一种解决方案是使用变量表:DECLARE TABLE @mainPrice
。两者都在工作。
我很高兴知道为什么会发生这种情况,以及为什么C#拒绝将临时表作为我的SP的一部分,但此刻我找到了所需的解决方案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句