将下面的sql语句改成存储过程,动态sql,

--数据表备份
select *into 目标表 from 备份表;
--Excel2007 导入到sql server2005
--1.启用Ad Hoc Distributed Queries(为导入数据做准备)
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
--2.将excel2007的数据和表结构直接copy到sql server 2007
SELECT * into exceltosql
FROM OpenDataSource( 'Microsoft.Ace.OleDB.12.0','Data Source="e:\1.xlsx";User ID=Admin;Password=;Extended Properties=Excel 12.0')...[Sheet1$]

改成这种格式:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
alter PROCEDURE procExcel2007ToSQL2005
@tableName varchar(50),--表名(sql2005)
@excelPath varchar(50) --Excel路径
AS
DECLARE @SQL NVARCHAR(1000)
BEGIN
SET NOCOUNT ON;
SELECT * into @tableName
FROM OpenDataSource('Microsoft.Ace.OleDB.12.0','Data Source="e:\1.xlsx";User ID=Admin;Password=;Extended Properties=Excel 12.0')...[Sheet1$]
END
GO

select ID,企业帐号,信息内容,更新时间
from(
select ID,企业帐号,信息内容,更新时间,row_number()over(partition by 企业帐号 order by 更新时间 desc) id
from 表名) tmp
where id <= 5

奔驰M888

----------------------------------------------
这一条要把row_number()改成rank()就对了

select ID,企业帐号,信息内容,更新时间
from(
select ID,企业帐号,信息内容,更新时间,rank()over(partition by 企业帐号 order by 更新时间 desc) id
from 表名) tmp
where id <= 5
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-10-01
ALTER PROCEDURE [dbo].[procExcel2007ToSQL2005]
@tableName varchar(50),--表名(sql2005)
@excelPath varchar(50) --Excel路径
AS
DECLARE @SQL NVARCHAR(1000)
BEGIN
SET NOCOUNT ON;
set @sql='SELECT * into '+@tableName+
' FROM OpenDataSource(''Microsoft.Ace.OleDB.12.0'',''Data Source="'+@excelPath+'";User ID=Admin;Password=;Extended Properties=Excel 12.0'')...[Sheet1$]'
exec(@sql)
END本回答被提问者采纳
相似回答