【发布时间】:2020-07-06 03:40:54
【问题描述】:
我正在尝试使用存储过程插入数据,同时基于Customer 和AccountNumber 进行搜索。有什么办法可以用较短的形式编写以下代码?我应该为此在数据库中创建一个存储过程还是直接使用它从 VB 中插入?
declare @Customer int ,@AccountNumber int
IF NOT EXISTS (SELECT * FROM Table_A
WHERE AccountNumber = @AccountNumber AND Customer = @Customer)
BEGIN
INSERT INTO Table_A
SELECT TOP 1 *
FROM Table_B
WHERE AccountNumber = @AccountNumber AND Customer = @Customer
END
IF NOT EXISTS (SELECT * FROM Table_A
WHERE AccountNumber = @AccountNumber AND Customer = @Customer)
BEGIN
INSERT INTO Table_A
SELECT TOP 1 *
FROM Table_C
WHERE AccountNumber = @AccountNumber AND Customer = @Customer
END
IF NOT EXISTS (SELECT * FROM Table_A
WHERE AccountNumber = @AccountNumber AND Customer = @Customer)
BEGIN
INSERT INTO Table_A
SELECT TOP 1 *
FROM Table_D
WHERE AccountNumber = @AccountNumber AND Customer = @Customer
END
【问题讨论】:
-
不使用
IF语句,而是将条件添加到WHERE子句。 是否应该您创建一个 SP - 完全取决于您。 -
建议列出
insert语句的列,更清晰,以后不太可能导致问题。 -
我正在检查表 A 中是否不存在记录,然后仅从表 B 或 C 或 D 中插入。您的意思是为表添加
where条件吗?我将添加列列表。 -
另外:使用
TOP 1without 和ORDER BY是非常没用的 - 你得到 1 个任意列,因为你没有定义你想要你的行由.....订购 -
Table_B、Table_C 和 Table_D 使用 UNION ALL 怎么样?
标签: sql-server vb.net