简而言之,这就是我要做的事情:
CREATE PROCEDURE sp_insertingStuff
@value1
AS
INSERT INTO [my_table] (column1, column2)
VALUES (@value1, execute sp_anotherSP)
GO
我需要知道的是:是否可以在INSERT
语句中执行存储过程?如果有更好的方法,我可以接受建议。我需要做这样的事情的原因是因为我需要运行一些IF语句来获取第二列的值。
答案 0 :(得分:3)
在第一个sp内的insert语句上方执行第二个 像:
CREATE PROCEDURE sp_insertingStuff
@value1
AS
declare @value2 int
exec @value2 = sp_anotherSP
INSERT [my_table] (
column1,
column2
)
VALUES (
@value1,
@value2
)
GO
答案 1 :(得分:1)
您无法在VALUES
部分执行sp。你必须在插入之前执行并获得返回/输出值,就像这样。
CREATE PROCEDURE sp_insertingStuff
@value1
AS
DECLARE @anotherValue INT
execute @anotherValue = sp_anotherSP
INSERT [my_table] (
column1,
column2
)
VALUES (
@value1,
@anotherValue
)
答案 2 :(得分:0)
在sp_anotherSP中添加OUTPUT参数 https://technet.microsoft.com/en-us/library/ms187004(v=sql.105).aspx 和
DECLARE @Val <type>
EXEC sp_anotherSP @Val OUTPUT
... insert using @val
答案 3 :(得分:0)
提到的一个解决方案是添加OUTPUT参数。另一种方法是将存储过程重写为函数,只要存储过程还没有UPDATE / INSERT / DELETE任何数据。
答案 4 :(得分:0)
是的,这可以通过在插入sp中创建临时表来完成。 然后调用要调用的sp并将值存储在临时表中,然后可以在sp中使用该临时表值,最后删除该临时表