我从开发的控制台应用程序中获取了一系列数据,需要将这些数据传输到SQL数据库中。由于SQL注入是易变的,因此我决定尝试通过表值参数将其传递给存储过程。我创建的表类型没有问题,并且在“用户定义的表类型”文件夹下列出了该表类型。我遇到的问题是,当我尝试创建存储过程时,出现以下错误:
消息2715,级别16,状态3,过程sp_IsertBackupData,第2行 [Batch Start Line 0]列,参数或变量#1:找不到 数据类型VeeamTableType。参数或变量“ @VeeamTableType”具有 无效的数据类型。
有人对这里的问题有任何见识吗?
我已经尝试刷新本地缓存。
CREATE PROCEDURE sp_IsertBackupData
@VeeamTableType VeeamTableType READONLY
AS
BEGIN
DECLARE @q varchar(1000)
SET @q= 'SELECT * FROM' + @VeeamTableType
INSERT INTO ASManagement.dbo.VeeamBackupResults
(
Id,
Server,
BackupLogFileName,
BackupLogFileSize,
CreatedOn
)
EXEC (@q)
END
SELECT * FROM ASManagement.VeeamBackupResults
CREATE TYPE VeeamBackupResults.VeeamTableType as TABLE
(
Id int primary key,
Server varchar(500) null,
BackupLogFileName varchar (500) null,
BackupLogFileSize float null,
CreatedOn datetime null
)
答案 0 :(得分:1)
出现错误的根本原因是存储过程找不到VeeamTableType
,因为您在VeeamBackupResults
模式下创建了该程序,并且您试图在默认模式下创建该过程({dbo
最多不会将默认值更改为其他值)
因此,要纠正该错误,您应该遵循以下解决方案之一:-
1)在VeeamBackupResults
模式下创建过程
尝试 CREATE PROCEDURE VeeamBackupResults.sp_IsertBackupData
代替 CREATE PROCEDURE sp_IsertBackupData
或者2)以正确的模式传递VeeamTableType
尝试: @VeeamTableType VeeamBackupResults.VeeamTableType READONLY
代替: @VeeamTableType VeeamTableType READONLY
或3)将用户定义表变量创建为默认架构
尝试: CREATE TYPE VeeamTableType as TABLE
代替: CREATE TYPE VeeamBackupResults.VeeamTableType as TABLE
答案 1 :(得分:0)