Ram*_*amy 30 sql-server sql-server-2008
这个陈述有什么问题?
ALTER Function [InvestmentReturn].[getSecurityMinLowForPeriod](@securityid int,
@start datetime,
@end datetime)
returns xml
begin
declare @results varchar(500)
declare @low int
declare @adjustedLow int
declare @day varchar(10)
if @end is null
begin
set @end = getdate()
end
set @adjustedLow = (select min(adjLow)
from (
select Low * [InvestmentReturn].[fn_getCorporateActionSplitFactor](isq.securityid, @start, convert(varchar,day, 111)) as adjLow
from
securityquote isq
where isq.securityid = @securityid and isq.day >= convert(varchar(10), @start, 111) and convert(varchar(10), @end, 111) >= isq.day
and low != -1
) as x)
select
top 1 @low = low
, @day = day
, @adjustedLow
--select high
from
securityquote sq
where
day >= convert(varchar(10), @start, 111) and convert(varchar(10), @end, 111) >= day
and securityid = @securityid and low != -1
order by low asc
set @results= '<results type="debug_min">'
set @results = @results + '<periodStart>' + coalesce(cast(@start as varchar(20)), 'NULL') + '</periodStart>'
set @results = @results + '<periodEnd>' + coalesce(cast(@end as varchar(20)), 'NULL') + '</periodEnd>'
set @results = @results + '<securityID>' + coalesce(cast(@securityID as varchar(10)), 'NULL') + '</securityID>'
set @results = @results + '<periodMin>' + coalesce(cast(@low as varchar(10)), '-11111') + '</periodMin>'
set @results = @results + '<coraxAdjustedPeriodMin>' + coalesce(cast(@adjustedLow as varchar(10)), '-11111') + '</coraxAdjustedPeriodMin>'
set @results = @results + '<dayMinOcurred>' + coalesce(@day, 'NULL') + '</dayMinOcurred>'
set @results = @results + '</results>'
return @results
Run Code Online (Sandbox Code Playgroud)
只是为了解释答案(在得到错误的地方之后),我只是从第二个select语句中删除了@adjustedLow.
Mar*_*icz 46
SELECT语句中的列值分配给局部变量@low和 @day局部变量; 该@adjustedLow值未分配给任何变量,它会导致问题:
问题出在这里:
select
top 1 @low = low
, @day = day
, @adjustedLow -- causes error!
--select high
from
securityquote sq
...
Run Code Online (Sandbox Code Playgroud)
详细说明和解决方法:SQL Server错误消息 - 消息141 - 为变量赋值的SELECT语句不能与数据检索操作组合使用.
Gov*_*ind 14
您不能使用为变量赋值的select语句也将数据返回给用户以下代码可以正常工作,因为我声明了1个局部变量,并且该变量在select语句中使用.
Begin
DECLARE @name nvarchar(max)
select @name=PolicyHolderName from Table
select @name
END
Run Code Online (Sandbox Code Playgroud)
下面的代码将抛出错误"为变量赋值的SELECT语句不能与数据检索操作结合"因为我们正在从表中重新获取数据(PolicyHolderAddress),但是错误说当你不允许数据检索操作时使用一些局部变量作为select语句的一部分.
Begin
DECLARE @name nvarchar(max)
select
@name = PolicyHolderName,
PolicyHolderAddress
from Table
END
Run Code Online (Sandbox Code Playgroud)
以上代码可以如下修改,
Begin
DECLARE @name nvarchar(max)
DECLARE @address varchar(100)
select
@name = PolicyHolderName,
@address = PolicyHolderAddress
from Table
END
Run Code Online (Sandbox Code Playgroud)
因此要么删除数据检索操作,要么添加额外的局部变量.这将解决错误.
| 归档时间: |
|
| 查看次数: |
150791 次 |
| 最近记录: |