【问题标题】:SQL Server stored procedure that inserts if not exist and returns a specific property (column value)SQL Server 存储过程,如果不存在则插入并返回特定属性(列值)
【发布时间】:2018-04-18 14:00:48
【问题描述】:

我有一个存储过程,如果它不存在,它会插入一条记录,但我想稍微调整一下。我希望存储过程返回列的值。

到目前为止,我有这个:

BEGIN
   IF NOT EXISTS (SELECT * 
                  FROM tableName
                  WHERE DATALENGTH(ColumnValueToReturn) = 0
                    AND property = @property ...)
   BEGIN
       INSERT INTO tableName (...)
       VALUES (...)
   END
END

我对这里的最佳选择感到困惑和不确定,有 3 种情况:

  1. 已有记录+ColumnValueToReturn不为空
  2. 有一条现有记录 + ColumnValueToReturn 为 NULL/空
  3. 没有现有记录

我希望在情况 1 中,存储过程返回 ColumnValueToReturn 值,在情况 2 和 3 中返回自定义值(0 或任何字符串)。

任何人都可以建议如何做到这一点?

请注意,这是在 Microsoft Flow (https://flow.microsoft.com/en-us/) 中使用的,因此有时会有一些限制。

感谢大家的帮助或建议!

亲切的问候

【问题讨论】:

  • 您使用的是 MS SQL Server 吗? (如果是,请在您的问题中添加 标签。)
  • 你知道在调用存储过程之前你是在执行更新还是插入?
  • @jarlh,完成,抱歉没有指定。 罗斯布什,不,我没有,这就是为什么我在 SP 中检查 IF NOT EXISTS ...。
  • 使用 if/else 逻辑如下:

标签: sql-server stored-procedures return-value power-automate


【解决方案1】:
if exists (SELECT 1 FROM tableName
                  WHERE datalength(**ColumnValueToReturn**)=0
                  AND property = @property ...)

select ColumnValueToReturn FROM tableName WHERE datalength(**ColumnValueToReturn**)=0
                  AND property = @property ...
else  
begin     
 INSERT INTO tableName (...)
 VALUES (...)
 select defaultvalue
end 

【讨论】:

  • Daniel,刚刚看到你的更新 :) 我想可能是这样,明天我试试这个,让你知道结果如何!
  • Daniel,我想在实现之前完全理解它,为什么选择 ColumnValueToReturn 语句必须在 IF 语句之后,因为我们在 IF 中选择它(如果存在)?谢谢你的解释!
  • 基本上就是说,如果它存在,我们将选择它 - 第二个选择是实际返回数据的内容
  • Daniel,我明白,我不明白为什么在 IF 之后(ELSE 之前)需要第二个 select 语句,所以如果它存在 'select 1 ...' ,如果我们已经通过声明“select 1 ...”来选择它,为什么还要“select ColumnValueToReturn ...”?对不起,如果我不清楚这个问题:)
  • 第一个选择没有返回数据——它只是检查它是否存在——第二个选择返回数据
猜你喜欢
  • 2019-09-06
  • 2015-03-02
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 2014-11-21
  • 1970-01-01
  • 2023-04-08
  • 2015-06-16
相关资源
最近更新 更多