【发布时间】:2016-09-09 12:45:58
【问题描述】:
我必须将批量数据插入数据库,并且表也是动态创建的。
首先创建了 UserDefined DataTypes
-- This is my user defined type
CREATE TYPE [dbo].[Custom_block] AS TABLE(
[Name] [nvarchar](200) NULL,
[population] [nvarchar](200) NULL
)
然后我有我必须插入到 SQL 表中的 DataTable (C#)。
--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 必须声明 标量变量“@myTableType2”
【问题讨论】:
-
删除
set @myTableType2=@myTableType;使用insert into select query to copy..我不确定。 -
已经尝试不设置
@myTableType2=@myTableType;不工作 -
这不起作用,因为您正在构建一个以“select * from”结尾的命令,而不是与表名连接而是与表本身连接。
-
@GuidoG:
insert into tableA select * from tableB这个查询有效,但现在我动态地进行此查询,因为我必须将表名和数据表作为参数传递 -
是的,但 @myTableType2 是一个值为 "tableB" 的 varchar 吗?
标签: sql-server sql-server-2008 user-defined-types sp-executesql