我有一个存储过程:
CREATE PROCEDURE MyProc
(
@Param1 [datetime],
@Param2 [nvarchar](20),
@Param3 [nvarchar](20),
@Param4 [nvarchar](20),
@Param5 [nvarchar](20),
)
AS
BEGIN
INSERT INTO MyTable1
(
Field1,
Field2,
Field3,
Field4,
Field5
)
SELECT
@Param1,
@Param2,
@Param3,
Field12,
'constantValue'
FROM MyTable2
WHERE Field13 = @Param4
END
我如何更改存储过程,以便它插入Field5
MyTable1
而不是constantValue
,而是另一个查询到MyTable2
的结果参数(@Param5
)?
即:
FROM MyTable2
WHERE Field13 = @Param5
答案 0 :(得分:4)
INSERT INTO MyTable1
(
Field1,
Field2,
Field3,
Field4,
Field5
)
SELECT
@Param1,
@Param2,
@Param3,
Field12,
(
select field_name from MyTable2 where Field13 = @Param5
)
FROM
MyTable2
WHERE
Field13 = @Param4
END
或声明一个新变量:
SET @newparam = (SELECT field_name FROM MyTable2 WHERE Field13 = @Param5 )
然后将此新参数插入到insert语句中。
答案 1 :(得分:3)
CREATE PROCEDURE MyProc
(
@Param1 [datetime],
@Param2 [nvarchar](20),
@Param3 [nvarchar](20),
@Param4 [nvarchar](20),
@Param5 [nvarchar](20),
)
AS
BEGIN
INSERT INTO MyTable1
(
Field1,
Field2,
Field3,
Field4,
Field5
)
SELECT
@Param1,
@Param2,
@Param3,
Field12,
(SELECT thing_i_care_about FROM MyTable2 WHERE Field13 = @Param5)
FROM MyTable2
WHERE Field13 = @Param4
END
答案 2 :(得分:2)
假设每个SELECT
中有一行SELECT
@Param1, @Param2, @Param3, Tp4.Field12, Tp5.Field12
NULL
FROM
MyTable2 Tp4
CROSS JOIN
MyTable2 Tp5
WHERE
Tp4.Field13 = @Param4 AND Tp4.Field13 = @Param5
JOIN会根据您的期望而变化,例如FULL OUTER JOIN .. ON 1=1
如果任一查询返回多于1行,则:
答案 3 :(得分:1)
它可以通过以下不同的方式完成,在这两种情况下,我认为我们应该考虑一个事情,如果返回的数据可能不止一个。
一个。
INSERT INTO MyTable1
(
Field1,
Field2,
Field3,
Field4,
Field5
)
SELECT
@Param1,
@Param2,
@Param3,
Field12,
(SELECT TOP 1 Column_Name FROM MyTable2 WHERE Field13 = @Param5)
FROM MyTable2
WHERE Field13 = @Param4
湾
DECLARE @Field13 VARCHAR(20)
SELECT TOP 1 @Field13 = FROM MyTable2 WHERE Field13 = @Param5
INSERT INTO MyTable1
(
Field1,
Field2,
Field3,
Field4,
Field5
)
SELECT
@Param1,
@Param2,
@Param3,
Field12,
@Field13
FROM MyTable2
WHERE Field13 = @Param4
在任何一种情况下都会成功,但“Field13 = @ Param5”条件可能会显示多个数据但会对第一个(TOP 1)数据起作用。