还是动态SQL的问题,“必须声明标量变量”?

therobinliu 2009-01-15 01:17:34

--赋值当前时间
declare @endtime datetime
declare @begintime datetime
declare @year nvarchar(4)
declare @ln nvarchar(1000)
declare @str nvarchar(1000)

select @endtime=getdate()
,@begintime=dateadd(dd,-120,getdate())
,@year=year(getdate())
--统计目标表中LN站特定时间的记录总数
declare @select2 int
--统计LN表中特定时间的记录总数
set @str='SELECT count(*)
FROM openrowset(''SQLOLEDB'',''172.19.18.133'';''sa'';''sa'',Meso_'+@year+'.dbo.LN_'+@year+' )
where DATEPART(minute, cast(观测时间 as dateTime))=0 and @begintime<观测时间 and 观测时间<@endtime '
exec(@str)
---------------------------
消息 137,级别 15,状态 2,第 3 行
必须声明标量变量 "@begintime"。
------------------------
动态SQL,有些问题还是弄不太清楚。
...全文
1086 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangtianxi 2012-08-24
  • 打赏
  • 举报
回复
10楼的最正确啊
therobinliu 2009-01-15
  • 打赏
  • 举报
回复
--赋值当前时间
declare @endtime nvarchar(100)
declare @begintime nvarchar(100)
declare @year nvarchar(4)
declare @ln nvarchar(1000)
declare @str nvarchar(1000)

select @endtime=convert(varchar(20),getdate(),20)
,@begintime=convert(varchar(20),dateadd(dd,-120,getdate()),20)
,@year=convert(varchar(4),year(getdate()),4)
--统计LN表中特定时间的记录总数
set @str='SELECT count(*)
FROM openrowset(''SQLOLEDB'',''172.19.18.133'';''sa'';''sa'',Meso_'+@year+'.dbo.LN_'+@year+' )
where DATEPART(minute, cast(观测时间 as datetime))=0 a nd '+@begintime+'<观测时间 and 观测时间 <'+@endtime+''
exec(@str)
print @str
-------------------------
消息 102,级别 15,状态 1,第 3 行
'a' 附近有语法错误。
SELECT count(*)
FROM openrowset('SQLOLEDB','172.19.18.133';'sa';'sa',Meso_2009.dbo.LN_2009 )
where DATEPART(minute, cast(观测时间 as datetime))=0 a nd 2008-09-17 14:18:54<观测时间 and 观测时间 <2009-01-15 14:18:54
ChinaJiaBing 2009-01-15
  • 打赏
  • 举报
回复

declare @endtime datetime
declare @begintime datetime
declare @year nvarchar(4)
declare @ln nvarchar(1000)
declare @str nvarchar(1000)

select @endtime=getdate()
,@begintime=dateadd(dd,-120,getdate())
,@year=year(getdate())
--统计目标表中LN站特定时间的记录总数
declare @select2 int
--统计LN表中特定时间的记录总数
set @str='SELECT count(*)
FROM openrowset(''SQLOLEDB'',''172.19.18.133'';''sa'';''sa'',Meso_'+@year+'.dbo.LN_'+@year+' )
where DATEPART(minute, cast(观测时间 as dateTime))=0 and' + @begintime +' <观测时间 and 观测时间' < @endtime
exec(@str)
观测时间是什么格式,最好是这种格式:'年-月-日'
幸运的意外 2009-01-15
  • 打赏
  • 举报
回复
一般是组装字符串时出了问题吧。把组装好的字符串打印出来看看吧
wjfmail 2009-01-15
  • 打赏
  • 举报
回复
动态执行要把datetime转成字符串.
set @str='SELECT count(*)
FROM openrowset(''SQLOLEDB'',''172.19.18.133'';''sa'';''sa'',Meso_'+@year+'.dbo.LN_'+@year+' )
where DATEPART(minute, cast(观测时间 as dateTime))=0 and '+@begintime+' <观测时间 and 观测时间 <'+@endtime

改为:
set @str='SELECT count(*)
FROM openrowset(''SQLOLEDB'',''172.19.18.133'';''sa'';''sa'',Meso_'+@year+'.dbo.LN_'+@year+' )
where DATEPART(minute, cast(观测时间 as dateTime))=0 and '''+convert(varhcar(30),@begintime)+''' <观测时间 and 观测时间 <'+convert(varchar(30),@endtime)+'''';
cqlxm 2009-01-15
  • 打赏
  • 举报
回复

--赋值当前时间
declare @endtime datetime
declare @begintime datetime
declare @year nvarchar(4)
declare @ln nvarchar(1000)
declare @str nvarchar(1000)
select @endtime=getdate()
,@begintime=dateadd(dd,-120,getdate())
,@year=year(getdate())
--统计目标表中LN站特定时间的记录总数
declare @select2 int
--统计LN表中特定时间的记录总数
set @str='SELECT count(*)
FROM openrowset(''SQLOLEDB'',''172.19.18.133'';''sa'';''sa'',Meso_'+@year+'.dbo.LN_'+@year+' )
where DATEPART(minute, cast(观测时间 as dateTime))=0 and '+cast(@begintime as nvarchar)+' <观测时间 and 观测时间 <'+cast(@endtime as nvarchar)
exec(@str)
therobinliu 2009-01-15
  • 打赏
  • 举报
回复
2009-1-15 13:20:00
百年树人 2009-01-15
  • 打赏
  • 举报
回复
你的“观测时间”是什么格式的?举个数据例子看看
水族杰纶 2009-01-15
  • 打赏
  • 举报
回复
--TRY
--TRY
--赋值当前时间
declare @endtime datetime
declare @begintime datetime
declare @year nvarchar(4)
declare @ln nvarchar(1000)
declare @str nvarchar(1000)
select @endtime=convert(varchar(10),getdate(),120)
,@begintime=convert(varchar(10),dateadd(dd,-120,getdate()),120)
,@year=ltrim(year(getdate()))
--统计目标表中LN站特定时间的记录总数
declare @select2 int
--统计LN表中特定时间的记录总数
set @str='SELECT count(*)
FROM openrowset(''SQLOLEDB'',''172.19.18.133'';''sa'';''sa'',Meso_'+@year+'.dbo.LN_'+@year+' )
where DATEPART(minute, cast(观测时间 as dateTime))=0 and '+@begintime+' <观测时间 and 观测时间 <'+@endtime
exec(@str)
therobinliu 2009-01-15
  • 打赏
  • 举报
回复
以上两个朋友修改后都出现相同的问题
消息 241,级别 16,状态 1,第 13 行
从字符串向 datetime 转换时失败。
wsh236 2009-01-15
  • 打赏
  • 举报
回复
那就是转换错误了,
therobinliu 2009-01-15
  • 打赏
  • 举报
回复
消息 241,级别 16,状态 1,第 13 行
从字符串向 datetime 转换时失败。
百年树人 2009-01-15
  • 打赏
  • 举报
回复
declare @endtime datetime
declare @begintime datetime
declare @year nvarchar(4)
declare @ln nvarchar(1000)
declare @str nvarchar(1000)

select @endtime=getdate()
,@begintime=dateadd(dd,-120,getdate())
,@year=year(getdate())
--统计目标表中LN站特定时间的记录总数
declare @select2 int
--统计LN表中特定时间的记录总数
set @str='SELECT count(*)
FROM openrowset(''SQLOLEDB'',''172.19.18.133'';''sa'';''sa'',Meso_'+@year+'.dbo.LN_'+@year+' )
where DATEPART(minute, cast(观测时间 as dateTime))=0 and '+@begintime+' <观测时间 and 观测时间 <'+@endtime
exec(@str)
水族杰纶 2009-01-15
  • 打赏
  • 举报
回复
--TRY
--赋值当前时间
declare @endtime datetime
declare @begintime datetime
declare @year nvarchar(4)
declare @ln nvarchar(1000)
declare @str nvarchar(1000)
select @endtime=getdate()
,@begintime=dateadd(dd,-120,getdate())
,@year=year(getdate())
--统计目标表中LN站特定时间的记录总数
declare @select2 int
--统计LN表中特定时间的记录总数
set @str='SELECT count(*)
FROM openrowset(''SQLOLEDB'',''172.19.18.133'';''sa'';''sa'',Meso_'+@year+'.dbo.LN_'+@year+' )
where DATEPART(minute, cast(观测时间 as dateTime))=0 and '+@begintime+' <观测时间 and 观测时间 <'+@endtime
exec(@str)

34,837

社区成员

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

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