Save Exec导致变量

时间:2014-08-16 09:29:35

标签: sql sql-server stored-procedures

根据输入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的重复行)

2 个答案:

答案 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>