22,230
社区成员
发帖
与我相关
我的任务
分享
create PROCEDURE XlsToTable
(
@url varchar(100)--excel路径
)
as
declare @temp_error varchar(100),
@temp_url varchar(1000),
@temp_return int
set @temp_url = 'SELECT * into #temp FROM OPENROWSET(''MICROSOFT.JET.OLEDB.4.0'',''Excel 5.0;HDR=NO;IMEX=1;DATABASE='+@url+''',Sheet1$) AS B '
exec @temp_url
select * from #temp
--服务器: 消息 203,级别 16,状态 2,过程 XlsToTable,行 12
--名称
'SELECT * into #temp FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=NO;IMEX=1;DATABASE=C:\1.xls',Sheet1$) AS B '
--不是有效的标识符。
declare @temp_url varchar(8000),@url varchar(200)
set @url='C:\test.xls'
set @temp_url = 'SELECT * into #temp FROM OPENROWSET(''MICROSOFT.JET.OLEDB.4.0'',''Excel 5.0;HDR=NO;IMEX=1;DATABASE='+@url+''',Sheet1$) AS B '
print @temp_url
--SELECT * into #temp FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=NO;IMEX=1;DATABASE=C:\test.xls',Sheet1$) AS B
这个测试没问题
declare
@temp_url varchar(1000),@url varchar(8000)
set @url = 'd:\bb.xls'
set @temp_url = 'SELECT * FROM OPENDATASOURCE(''Microsoft.Jet.OLEDB.4.0'',
''Data Source="'+@url+'";User ID=Admin;Password=;Extended properties=Excel 5.0'')...[sheet1$]'
exec( @temp_url)
create PROCEDURE XlsToTable
(
@url varchar(100)--excel路径
)
as
declare @temp_error varchar(100),
@temp_url varchar(1000),
@temp_return int
set @temp_url = 'SELECT * into #temp FROM OPENROWSET(''MICROSOFT.JET.OLEDB.4.0'',''Excel 5.0;HDR=NO;IMEX=1;DATABASE='+@url+''',Sheet1$) AS B '
exec (@temp_url)
select * from #temp
将Excel的数据导入SQL server :
-- ======================================================
SELECT * into newtable
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
实例:
SELECT * into newtable
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
1 :普通SQL语句可以用Exec执行
eg: Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N
2:字段名,表名,数据库名之类作为变量时,必须用动态SQL
eg:
declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格
当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'FiledName' --设置字段名
declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错
declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确
3. 输出参数
declare @num int,
@sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)
--如何将exec执行结果放入变量中?
declare @num int,
@sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num
set @temp_url = 'SELECT * into #temp FROM OPENROWSET(''MICROSOFT.JET.OLEDB.4.0'',''Excel 5.0;HDR=NO;IMEX=1;DATABASE="'+@url+'"'',Sheet1$) AS B '
exec @temp_url