插入,即使是空白
Posted
技术标签:
【中文标题】插入,即使是空白【英文标题】:Insert Into, even if blank 【发布时间】:2021-06-17 10:33:37 【问题描述】:我检查过去 18 小时内是否有文件进入。 在同一个表中,检查始终生成文件的位置。这个特定的文件并不总是进来。
我想做的是设置一个 IF/ELSE,所以如果不满足条件,仍然会生成该字段来告诉用户文件不存在,而不是没有记录。
DECLARE @BASE varchar(55) = 'BASE5_017_%'
INSERT INTO @TranTable(Inbound,BatchID,Filename,FileDateTime,TotalCount,IsValid)
select top 1 'BASE', BatchID,Filename,FileDateTime,TotalCount,IsValid from TranBatchFile (nolock)
where Filename like @BASE AND FileDateTime >= DATEADD(HH,@TimeD,@Now) order by 1 desc
这就是我所拥有的。我喜欢的是:
Insert into ....
If this check comes back with something
show the something
else
"nothing here champ, find out what went wrong"
保持 Inbound 字段不变,但其余部分为空白,也许 Filename
字段说找出问题所在
【问题讨论】:
我很困惑。您必须询问操作系统是否有文件可用,而您的代码没有这样做。这些信息是否反映在表格中?如果是这样,您需要解释它是如何工作的。 在IF
子句中使用EXISTS
? "nothing here champ, find out what went wrong"
是什么逻辑?您希望那里发生什么?
表格输出显示了通过事件调度程序生成的多个文件(不重要)。上面的代码从TranBatchFile
中提取文件的名称和信息。这个BASE
文件并不总是存在,所以表的输出需要提醒用户,而不是没有记录
永远不要在生产代码中使用ORDER BY <num>
。对于一次性查询,它可以节省一些输入,但它是维护的噩梦。在这种情况下,这是一个彻头彻尾的错误,因为您是按值'BASE'
进行排序的,这当然根本就没有排序。
我不明白这有什么关系——事实上你现在有一个不确定顺序的SELECT TOP 1
,这意味着你会得到任何与WHERE
匹配的记录——引擎的选择。如果您知道不能或不应该有多个记录,您可以省略TOP 1
并稍后检查;如果可能有更多记录并且您确实想要特定的记录,请使用有意义的ORDER BY
(如ORDER BY FileDateTime DESC
)。
【参考方案1】:
这就是你要找的吗?
insert into test
select id, col2 from test where id = 2
IF @@ROWCOUNT = 0
insert into test values(2, 'B')
DEMO
【讨论】:
忽略最后一条评论,这是正确的,我在其中一个声明中更改了错误的字段。这很好用 我很乐意提供帮助。我还没有看到最后的评论:)以上是关于插入,即使是空白的主要内容,如果未能解决你的问题,请参考以下文章