我是一名新的程序员分析师。我正在学习 SQL,我正在尝试将多个表(所有表都具有相同字段)的数据插入到一个大型历史表中。是否有捷径可寻?到目前为止我已经有了这个,但我知道这是错误的:
Create Procedure InsertTables
@ExistingTableName nvarchar(50)
AS
insert into EMF_Archive
select
em_Employee_ID,
em_Payroll_Unit,
em_Name,
em_Payroll_Unit_2,
em_Last_Name,
em_First_Name,
em_Middle_Initial,
em_Social_Security_No,
em_Payroll_Group,
em_Employee_Status,
em_Hire_Date,
em_Rehire_Date,
em_Adjusted_Hire_Date,
em_Birth_Date,
em_Termination_Date,
em_Organization,
em_Title,
em_Work_Comp,
em_Annual_Pay,
em_Salary_Rate,
em_Tax_Group,
em_Seniority_Date,
em_service_Years,
em_Service_Months,
em_Grade,
em_Variable_3,
em_Variable_4,
em_Standard_Hours,
em_Variable_10,
em_Variable_11,
em_Shift
from @ExistingTableName
GO
EXEC InsertTables 'emf_payPeriod1'
我想像这样执行几次:
EXEC InsertTables 'emf_payPeriod1'
EXEC InsertTables 'emf_payPeriod2'
EXEC InsertTables 'emf_payPeriod3'
etc
等等......
最佳答案
您无法像您尝试的那样传递表名称,您将需要使用动态 sql 来执行此操作,如下所示...
Create Procedure InsertTables
@ExistingTableName nvarchar(128)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Sql NVARCHAR(MAX);
SET @Sql = N' INSERT INTO EMF_Archive
select
em_Employee_ID,
em_Payroll_Unit,
em_Name,
em_Payroll_Unit_2,
em_Last_Name,
em_First_Name,
em_Middle_Initial,
em_Social_Security_No,
em_Payroll_Group,
em_Employee_Status,
em_Hire_Date,
em_Rehire_Date,
em_Adjusted_Hire_Date,
em_Birth_Date,
em_Termination_Date,
em_Organization,
em_Title,
em_Work_Comp,
em_Annual_Pay,
em_Salary_Rate,
em_Tax_Group,
em_Seniority_Date,
em_service_Years,
em_Service_Months,
em_Grade,
em_Variable_3,
em_Variable_4,
em_Standard_Hours,
em_Variable_10,
em_Variable_11,
em_Shift
from ' + QUOTENAME(@ExistingTableName)
EXECUTE sp_executesql @Sql
END
GO
执行程序
要进一步对所有表执行此过程,您可以执行以下查询
--Make sure the following query is pulling all the required tables
SELECT name INTO #Tables
from sys.tables
WHERE name like 'emf_payPeriod%'
-- Now use that temp table to pass table names to your procedure
DECLARE @TableName NVARCHAR(128);
WHILE EXISTS (SELECT 1 FROM #Tables)
BEGIN
SELECT TOP 1 @TableName = name FROM #Tables
EXECUTE InsertTables @TableName
DELETE FROM #Tables WHERE name = @TableName
END
关于sql - 将多个表插入到一张表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23666001/