使用动态SQL从临时表插入到表中;错误:将varchar转换为数据类型numeric时出现算术溢出错误
我正在开发一个SQL Server存储过程 这是代码中起作用的部分:使用动态SQL从临时表插入到表中;错误:将varchar转换为数据类型numeric时出现算术溢出错误,sql,sql-server,dynamic,temp-tables,Sql,Sql Server,Dynamic,Temp Tables,我正在开发一个SQL Server存储过程 这是代码中起作用的部分: INSERT INTO [MYBASE].dbo.[DatabaseName] ([Employee No_], [From Date], [To Date], [Description], [Quantity],[First Name], [Last Name]) SELECT EmployeeNo, FromDate, ToDate, Description, Quantity,
INSERT INTO [MYBASE].dbo.[DatabaseName]
([Employee No_], [From Date], [To Date], [Description], [Quantity],[First Name], [Last Name])
SELECT
EmployeeNo, FromDate, ToDate, Description, Quantity,
FirstName, LastName
FROM
#User_Data
现在,我需要更改此部分:
INSERT INTO [MYBASE].dbo.[DatabaseName]
其中DatabaseName
将是变量
我试过这个:
CREATE TABLE #User_Data
(
User_id INTEGER,
FirstName VARCHAR(30),
LastName VARCHAR(30),
EmployeeNo VARCHAR(20),
Description VARCHAR(50),
FromDate DATETIME,
ToDate DATETIME
)
INSERT INTO #User_Data
SELECT u.fname, u.lname, u.employee_no, ... (this works)
DECLARE @InsertStatement VARCHAR(MAX)
SET @InsertStatement =
'INSERT INTO [MYBASE].dbo.[' + @DatabaseName + ']
([Employee No_], [From Date], [To Date], [Description],
[Quantity], [First Name], [Last Name])
SELECT
EmployeeNo, FromDate, ToDate, Description,
Quantity, FirstName, LastName
FROM
#User_Data'
EXEC(@InsertStatement)
但它不起作用。这就是我得到的错误:
将varchar转换为数据类型numeric时出现算术溢出错误
请帮助。我一直在使用同义词来避免在引号内书写:
Declare @MyDB as nvarchar(100) = 'myDBName'
if exists(select * from sys.synonyms where name = N'TableinMyDB') drop synonym [TableinMyDB];
exec('CREATE SYNONYM [TableinMyDB] FOR [' + @MyDB + '].dbo.[myTableName];');
INSERT INTO [TableinMyDB]
(
[Employee No_]
,[From Date]
,[To Date]
,[Description]
,[Quantity]
,[First Name]
,[Last Name]
)
SELECT
EmployeeNo
,FromDate
,ToDate
,Description
,Quantity
,FirstName
,LastName
FROM #User_Data
为什么每个“数据库”都有一个单独的表,而不是一个列名称为“数据库”的表?是否有名为“数据库”的表?否,我没有名为“数据库”的表。我的错,对不起。正如Gordon所指出的,这里最大的问题是您的体系结构。为什么数据库的每个值都需要一个单独的表?它应该是一个表中的一列。那么整个问题就变得微不足道了。您可以跳过动态sql,跳过临时表。这就像一个insert语句一样简单。您填充
@DatabaseName
的代码部分在哪里?在EXEC之前打印InsertStatement
时,您看到了什么?在我的代码中是这样的。我只是在删除和重新创建后才使用同义词。使用后我也会滴水。不可能假设一个同义词!谢谢,我就这样试试。