For dynamic StoredProcedure with custom user defined datatype error: Must declare the scalar variable "@myTableType2"
For dynamic StoredProcedure with custom user defined datatype error: Must declare the scalar variable "@myTableType2"
我必须将批量数据插入数据库并且 table 也是动态创建的。
首先创建了 UserDefined DataTypes
-- This is my user defined type
CREATE TYPE [dbo].[Custom_block] AS TABLE(
[Name] [nvarchar](200) NULL,
[population] [nvarchar](200) NULL
)
然后我有 DataTable (C#),我必须将其插入 SQL table。
--My StoredProcedure :
CREATE PROCEDURE dumpData(
@myTableType [Custom_block] readonly,
@tableName NVARCHAR(200)
)
AS
BEGIN
DECLARE @sql NVARCHAR(MAX);
Declare @myTableType2 as [Custom_block];
set @myTableType2=@myTableType;
SET @sql=N' truncate table '+QUOTENAME(@tableName)+ '
insert into '+QUOTENAME(@tableName)+' select * from '+@myTableType2
EXECUTE sp_executesql @sql
END
获取错误:
Msg 137, Level 16, State 1, Procedure dumpData, Line 12 Must declare
the scalar variable "@myTableType2"
尝试将表名添加为字符串..
喜欢
CREATE PROCEDURE dumpData(
@myTableType varchar(50),
@tableName NVARCHAR(200)
)
.....
SET @sql=N' truncate table '+QUOTENAME(@tableName)+ '
insert into '+QUOTENAME(@tableName)+' select * from '+@myTableType2
我想这会解决您的问题
您不需要@myTableType2,您可以直接通过 table 值参数插入值。像这样尝试,
CREATE PROCEDURE dumpData (
@myTableType [Custom_block] readonly
,@tableName NVARCHAR(200)
)
AS
BEGIN
DECLARE @sql NVARCHAR(MAX);
SELECT *
INTO #temp
FROM @myTableType
--DECLARE @myTableType2 [Custom_block];
--SET @myTableType2 = @myTableType;
SET @sql = N' truncate table ' + QUOTENAME(@tableName) + '
insert into ' + QUOTENAME(@tableName) + ' select * from #temp'
EXECUTE sp_executesql @sql
DROP TABLE #temp
END
我遇到了同样的情况,通过先动态创建 table 然后从临时 table
读取数据来解决
DECLARE @insertQuery nvarchar(max)
SET @insertQuery= N'DECLARE @tempTable AS dbo.UserDefinedType
INSERT INTO @tempTable
SELECT ''39140752'',''18e22a74-bee3-462b-aee3-172df46291f3'',''test''
SELECT * FROM @tempTable'
EXEC (@insertQuery)
我必须将批量数据插入数据库并且 table 也是动态创建的。
首先创建了 UserDefined DataTypes
-- This is my user defined type
CREATE TYPE [dbo].[Custom_block] AS TABLE(
[Name] [nvarchar](200) NULL,
[population] [nvarchar](200) NULL
)
然后我有 DataTable (C#),我必须将其插入 SQL table。
--My StoredProcedure :
CREATE PROCEDURE dumpData(
@myTableType [Custom_block] readonly,
@tableName NVARCHAR(200)
)
AS
BEGIN
DECLARE @sql NVARCHAR(MAX);
Declare @myTableType2 as [Custom_block];
set @myTableType2=@myTableType;
SET @sql=N' truncate table '+QUOTENAME(@tableName)+ '
insert into '+QUOTENAME(@tableName)+' select * from '+@myTableType2
EXECUTE sp_executesql @sql
END
获取错误:
Msg 137, Level 16, State 1, Procedure dumpData, Line 12 Must declare the scalar variable "@myTableType2"
尝试将表名添加为字符串..
喜欢
CREATE PROCEDURE dumpData(
@myTableType varchar(50),
@tableName NVARCHAR(200)
)
.....
SET @sql=N' truncate table '+QUOTENAME(@tableName)+ '
insert into '+QUOTENAME(@tableName)+' select * from '+@myTableType2
我想这会解决您的问题
您不需要@myTableType2,您可以直接通过 table 值参数插入值。像这样尝试,
CREATE PROCEDURE dumpData (
@myTableType [Custom_block] readonly
,@tableName NVARCHAR(200)
)
AS
BEGIN
DECLARE @sql NVARCHAR(MAX);
SELECT *
INTO #temp
FROM @myTableType
--DECLARE @myTableType2 [Custom_block];
--SET @myTableType2 = @myTableType;
SET @sql = N' truncate table ' + QUOTENAME(@tableName) + '
insert into ' + QUOTENAME(@tableName) + ' select * from #temp'
EXECUTE sp_executesql @sql
DROP TABLE #temp
END
我遇到了同样的情况,通过先动态创建 table 然后从临时 table
读取数据来解决DECLARE @insertQuery nvarchar(max)
SET @insertQuery= N'DECLARE @tempTable AS dbo.UserDefinedType
INSERT INTO @tempTable
SELECT ''39140752'',''18e22a74-bee3-462b-aee3-172df46291f3'',''test''
SELECT * FROM @tempTable'
EXEC (@insertQuery)