【发布时间】:2017-05-18 23:26:49
【问题描述】:
我正在处理 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,
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 转换为数字数据类型时出现算术溢出错误。
请帮忙。
【问题讨论】:
-
为什么要为每个“数据库”创建一个单独的表,而不是一个以“数据库”作为列名的表?
-
你有一个名为“数据库”的表吗?
-
不,我没有名为“数据库”的表。我的错,对不起。而不是 'DatabaseName' 是表的真实名称。
-
正如 Gordon 所指出的,这里最大的问题是您的架构。为什么每个数据库值都需要一个单独的表?它应该是一个表中的一列。那么这整个问题就变得微不足道了。您可以跳过动态 sql,跳过临时表。它就像一个插入语句一样简单。
-
填充
@DatabaseName的代码部分在哪里?在 EXEC 之前打印您的InsertStatement会看到什么?
标签: sql sql-server dynamic temp-tables