一个语法错误,大家进来看看

huanshen0634 2006-07-21 10:42:49
SELECT * into tmptable FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source=d:\book1.xls;User ID=;Password=;Extended properties=Excel 5.0')...[Sheet1$]
这句话直接执行就没有问题,可是换成下面这种方式就报错:
declare @filename as varchar(100)
select @filename='d:\book1.xls'
SELECT * into tmptable FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source='+@filename+';User ID=;Password=;Extended properties=Excel 5.0')...[Sheet1$]
提示在+附近有语法错误

///////////////////////////////
怎么解决呀?
...全文
187 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
xeqtr1982 2006-07-21
  • 打赏
  • 举报
回复
列名的话应该是另外表的列名吧,通过关联即可

insert into t(aaa,bbb,ccc,ddd) select aaa,bbb,ccc,ddd from t1,t2 where 关联
huanshen0634 2006-07-21
  • 打赏
  • 举报
回复
嗯,是个值
但是如果是个列名的话如何作呢?
xeqtr1982 2006-07-21
  • 打赏
  • 举报
回复
ddd是个值还是列名?

--如果是值
insert into t(aaa,bbb,ccc,ddd) select aaa,bbb,ccc,'ddd' from t1

huanshen0634 2006-07-21
  • 打赏
  • 举报
回复
还有一个问题,也顺便在这里问了:
就是我从一个表里把数据导入到别的表里:
insert into t(aaa,bbb,ccc,ddd) select aaa,bbb,ccc from t1
在t1表中没有ddd这个字段,我能不能这样写?
insert into t(aaa,bbb,ccc,ddd) select aaa,bbb,ccc from t1,‘ddd’
huanshen0634 2006-07-21
  • 打赏
  • 举报
回复
我的qq:24400683
msn:huanshen0634@hotmail.com
huanshen0634 2006-07-21
  • 打赏
  • 举报
回复
好了,多谢LouisXIV(夜游神)
能把你的qq或者msn告诉我吗,要多多向你请教
vfp_system 2006-07-21
  • 打赏
  • 举报
回复
declare @SQLStr varchar(1000)
declare @filename as varchar(100)
select @filename='d:\book1.xls'
set @SQLStr='SELECT * into tmptable FROM OpenDataSource('''
set @SQLStr=@SQLStr+'Microsoft.Jet.OLEDB.4.0'''
set @SQLStr=@SQLStr+',''Data Source='
set @SQLStr=@SQLStr+@filename+';User ID=;Password=;Extended properties=Excel 5.0'')'
set @SQLStr=@SQLStr+'...[Sheet1$]'
print @SQLStr
exec (@SQLStr)
LouisXIV 2006-07-21
  • 打赏
  • 举报
回复
--是执行报错吧,try

declare @filename as varchar(100)
select @filename='d:\book1.xls'
exec('SELECT * into tmptable FROM OpenDataSource(''Microsoft.Jet.OLEDB.4.0'',''Data Source='+@filename+';User ID=;Password=;Extended properties=Excel 5.0'')...[Sheet1$]')
xeqtr1982 2006-07-21
  • 打赏
  • 举报
回复
declare @filename as varchar(100)
select @filename='d:\book1.xls'
exec('SELECT * into tmptable FROM OpenDataSource(''Microsoft.Jet.OLEDB.4.0'',''Data Source='+@filename+';User ID=;Password=;Extended properties=Excel 5.0'')...[Sheet1$]')

--这样试试,应该是多了''
huanshen0634 2006-07-21
  • 打赏
  • 举报
回复
我照你的作了,可是提示第一行:'d:'附近有语法错误。
可是第一行是declare @filename as varchar(100)呀,没有d:呀?
xeqtr1982 2006-07-21
  • 打赏
  • 举报
回复
declare @filename as varchar(100)
select @filename='d:\book1.xls'
exec('SELECT * into tmptable FROM OpenDataSource(''Microsoft.Jet.OLEDB.4.0'',''Data Source='''+@filename+''';User ID=;Password=;Extended properties=Excel 5.0'')...[Sheet1$]')
huanshen0634 2006-07-21
  • 打赏
  • 举报
回复
好了,结贴
多谢楼上两位大哥相助,希望以后多多交流
xeqtr1982 2006-07-21
  • 打赏
  • 举报
回复
CREATE procedure [dbo].[p_newid]
@id varchar(20), --记录编号
@t varchar(2), --记录类型
@jie varchar(2), --记录属于第几届比赛
@f varchar(20) output --返回结果---新的记录编号
as
declare @tmpid varchar(20)
set @tmpid=substring(@id,3,10) +1
select @tmpid=@jie + @t + right('0000000000'+@tmpid,10)
select @f=@tmpid
GO

declare @a varchar(20)
exec p_newid '1T0000000006','T','2',@a output
select @a
huanshen0634 2006-07-21
  • 打赏
  • 举报
回复
第一个问题很好,确实要简洁多了
第二个问题还是不行
存储过程:
CREATE procedure [dbo].[p_newid]
@id varchar(20), --记录编号
@t varchar(2), --记录类型
@jie varchar(2), --记录属于第几届比赛
@f varchar(20) output --返回结果---新的记录编号
as
declare @tmpid varchar(20)
set @tmpid=substring(@id,3,10) +1
select @tmpid=@jie + @t + right('0000000000'+@tmpid,10)
select @f=@tmpid
GO

然后按照你的调用:
declare @a varchar(20)
p_newid '1T0000000006','T','2',@a out
select @a
结果提示错误:
服务器: 消息 170,级别 15,状态 1,行 18
第 18 行: 'p_newid' 附近有语法错误。
服务器: 消息 137,级别 15,状态 1,行 19
必须声明变量 '@a'。
LouisXIV 2006-07-21
  • 打赏
  • 举报
回复
1.
declare @tmpid varchar(20)
set @tmpid=substring(@id,3,10) +1
print @tmpid
if len(@tmpid)=1 set @tmpid=@jie + @t + '000000000' + @tmpid
if len(@tmpid)=2 set @tmpid=@jie + @t + '00000000' + @tmpid
if len(@tmpid)=3 set @tmpid=@jie + @t + '0000000' + @tmpid
if len(@tmpid)=4 set @tmpid=@jie + @t + '000000' + @tmpid
if len(@tmpid)=5 set @tmpid=@jie + @t + '00000' + @tmpid
if len(@tmpid)=6 set @tmpid=@jie + @t + '0000' + @tmpid
if len(@tmpid)=7 set @tmpid=@jie + @t + '000' + @tmpid
if len(@tmpid)=8 set @tmpid=@jie + @t + '00' + @tmpid
if len(@tmpid)=9 set @tmpid=@jie + @t + '0' + @tmpid
print @tmpid
太过罗嗦


declare @tmpid varchar(20)
set @tmpid=substring(@id,3,10) +1
select @tmpid=@jie + @t + right('0000000000' + @tmpid,10)


2.
--try
declare @a varchar(20)
p_newid '1T0000000006','T','2',@a out
select @a
huanshen0634 2006-07-21
  • 打赏
  • 举报
回复
可是要把@f varchar(20) output去掉的话,再调用就可以了,不知道是怎么回事?
问的问题较多,麻烦你了,这是最后一个了,嘿嘿
huanshen0634 2006-07-21
  • 打赏
  • 举报
回复
CREATE procedure [dbo].[p_newid]
@id varchar(20), --记录编号
@t varchar(2), --记录类型
@jie varchar(2), --记录属于第几届比赛
@f varchar(20) output --返回结果---新的记录编号
as
declare @tmpid varchar(20)
set @tmpid=substring(@id,3,10) +1
print @tmpid
if len(@tmpid)=1 set @tmpid=@jie + @t + '000000000' + @tmpid
if len(@tmpid)=2 set @tmpid=@jie + @t + '00000000' + @tmpid
if len(@tmpid)=3 set @tmpid=@jie + @t + '0000000' + @tmpid
if len(@tmpid)=4 set @tmpid=@jie + @t + '000000' + @tmpid
if len(@tmpid)=5 set @tmpid=@jie + @t + '00000' + @tmpid
if len(@tmpid)=6 set @tmpid=@jie + @t + '0000' + @tmpid
if len(@tmpid)=7 set @tmpid=@jie + @t + '000' + @tmpid
if len(@tmpid)=8 set @tmpid=@jie + @t + '00' + @tmpid
if len(@tmpid)=9 set @tmpid=@jie + @t + '0' + @tmpid
print @tmpid

select @f=@tmpid
return @f
GO

这个存储过程我调用的时候,
declare @a
p_newid '1T0000000006','T','2',@a
提示 '1T0000000006' 附近有语法错误。
还有就是返回值怎么返回呀?
huanshen0634 2006-07-21
  • 打赏
  • 举报
回复
哦,长知识了,多谢了,兄弟
能够告诉我你的msn或者qq?
平时多交流

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧