gpt4 book ai didi

sql - 在 SQL 中处理多个用户的插入和删除

转载 作者:行者123 更新时间:2023-12-01 09:19:37 26 4
gpt4 key购买 nike

我想维护一个使用ADO方法通过Excel将数据上传到SQL Server的系统。该过程包括两个步骤:

  1. 原始数据被插入到临时表中,比如dbo.TableTemp
  2. 使用存储过程处理原始数据并插入到dbo.GoodTable
  3. 在存储过程结束时从 dbo.TableTemp 中删除

有什么方法可以确保两个用户的事件不重叠?比如user1的delete from dbo.TableTemp不会在user2插入数据后,数据处理前执行?

更新。不幸的是,我没有成功使用#temp 表。它们似乎是临时的,当我尝试向其中插入数据时#temps 已经不存在了。为了上传数据,我使用了 Sergey Vaselenko 从这里下载的代码变体:http://www.excel-sql-server.com/excel-sql-server-import-export-using-vba.htm#Excel Data Export to SQL Server using ADO

在 Sergey 的解决方案中,可以在步骤 1 中插入数据之前通过存储过程创建表。但是当我使用存储过程创建 #temp 表时,它会在过程结束时消失,所以我无法向其中插入数据。有什么帮助吗?

最佳答案

使用temporary tables #TableTemp。这些对于每个 session 都是特定的,因此不会重叠。

There are two types of temporary tables: local and global. They differ from each other in their names, their visibility, and their availability. Local temporary tables have a single number sign (#) as the first character of their names; they are visible only to the current connection for the user, and they are deleted when the user disconnects from the instance of SQL Server. Global temporary tables have two number signs (##) as the first characters of their names; they are visible to any user after they are created, and they are deleted when all users referencing the table disconnect from the instance of SQL Server.

更新。 看起来像这个特别的 Excel-SQL Server Import-Export using VBA使用单独的函数创建表并上传数据,每次打开和关闭自己的连接。从 SQL Server 的角度来看,这些函数在不同的 session 中运行,因此临时表不会持久存在。我认为可以重写此解决方案以使用单连接创建临时表、填充、处理数据并将结果输出到永久表中。

您可能还会发现这个问题很有用:How do I make an ADODB.Connection Persistent in VBA in Excel?特别是 - Kevin Pope 的回答建议使用工作簿本身打开和关闭的全局连接变量:

Global dbConnPublic As ADODB.Connection

In the "ThisWorkbook" object:

Private Sub Workbook_Open()
Set dbConnPublic = openDBConn() 'Or whatever your DB connection function is called
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
dbConnPublic.Close
End Sub

关于sql - 在 SQL 中处理多个用户的插入和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34993912/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com