我必须将批量数据插入数据库,并且还动态创建表。
首先创建了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表中。
--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
得到错误:
消息137,级别16,状态1,过程dumpData,第12行必须声明 标量变量“@ myTableType2”
答案 0 :(得分:1)
您不需要@ myTableType2,您可以通过表值参数直接插入值。试试这样,
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
答案 1 :(得分:0)
尝试将tablename添加为字符串..
喜欢
npm install
我想这可以解决你的问题
答案 2 :(得分:0)
我遇到了相同的情况,并通过首先动态创建表然后从临时表中读取数据来解决
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)