根据输入ID:
,我已经有一个正在执行select的存储过程GET_ROW
SELECT TOP 1 *
FROM MyTable
WHERE ID = @ID
现在,我想创建另一个存储过程来检查@ID
是否存在。如果存在,则返回现有行。否则,使用请求的@ID
创建一个新行并将其返回。
所以,我想到这样的事情:
Declare ResRow
begin tran
ResRow = Exec GET_ROW @ID
if exists (ResRow)
return ResRow
else
Insert into ...
return Exec GET_ROW @ID
commit
执行此代码后,我想确保数据库中存在只有@ID
的行(没有具有相同ID的重复行)
答案 0 :(得分:1)
您必须先创建表变量,然后使用以下查询:
Declare @T Table(Col1 int, Col2 int ,...)
Insert Into @T
Exec Get_Row @ID
Select * From @T
答案 1 :(得分:1)
这个怎么样:
CREATE PROCEDURE dbo.InsertOrFetch @ID INT
AS
BEGIN
-- check if it doesn't exist yet
IF NOT EXISTS (SELECT * FROM dbo.MyTable WHERE ID = @ID)
INSERT INTO dbo.MyTable(ID)
VALUES (@ID)
-- now return the row
SELECT TOP (1) *
FROM dbo.MyTable
WHERE ID = @ID
END
如果您首先检查该行是否不存在,如果是,则插入新数据 - 之后SELECT
将始终返回该行(预先存在或新插入)。< / p>