【发布时间】:2020-11-26 18:19:36
【问题描述】:
我正在尝试为 IT 设备库存建立一个数据库。它使用 MS Access Office 365 前端和 SQL 2017 后端。
在数据库中,我们不想删除记录,只需将它们归档到另一个表中。为此,我在 SSMS 中创建了一个存储过程,并验证它可以正常工作。
我希望 VBA 调用这个存储过程。对于这个过程,我需要传递它的识别信息。在 VBA 中,我试图将服务器名称值从表单分配给可以传递给存储过程调用的变量。我找到了使用 EXEC 命令的示例,但 Access 告诉我必须使用 Procedure 子句。
Private Sub Command148_Click()
Dim SrvNameVar As String
Dim strSQL As String
Dim strParm As String
SrvNameVar = Me.SrvName
strParm = "PARAMETERS [Server Name] As CHAR;"
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Set dbs = CurrentDb
strSQL = strParm & "PROCEDURE dbo.sp_ArchiveServer [Server Name];"
Set qdf = dbs.CreateQueryDef("SrvArchive", strSQL)
dbs.Execute ("SrvArchive")
End Sub
在 SSMS 中正常运行的存储过程:
CREATE PROCEDURE sp_ArchiveServer @Server nvarchar(30) AS
BEGIN TRANSACTION;
INSERT INTO FSC.dbo.Archive_Servers ([SrvID],[SID],[SrvName],[Make],
[Model],[SN],[SrvIP],[RemoteMgmt],[OSID],[IsDP],[IsIEMRelay],
[IsGUP],[DatePurch],[WarrantyExp],[RAIDConfig],[PrintSrv],
[ConnectedToUPS],[VirtHost],[VirtMachine])
SELECT FSC.dbo.Servers.*
FROM FSC.dbo.Servers
WHERE FSC.dbo.Servers.SrvName = @Server;
DELETE FROM FSC.dbo.Servers
WHERE FSC.dbo.Servers.SrvName = @Server;
COMMIT;
【问题讨论】:
-
仅供参考,前缀
sp_由 Microsoft 保留(用于 S 特殊 Procedures),不应用于用户存储过程。 Is the sp_ prefix still a no-no? -
感谢@Larnu 的信息!
-
这能回答你的问题吗? Calling stored procedure using VBA
标签: sql-server vba ms-access stored-procedures