@SanKrish Вы можете попробовать это, ОБЪЯВИТЬ SHORTEST_CITY nvarchar (max) ОБЪЯВИТЬ ДЛИНУ varchar (100) ВЫБЕРИТЕ ТОП 1 SHORTEST_CITY = S.CITY, LENGTH = LEN (S.CITY) ОТ СТАНЦИИ S ЗАКАЗ ПО ЛЕНЕ (S.CITY) DESC; выберите SHORTEST_CITY выберите ДЛИНА

е так с этим утверждением?

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

Чтобы объяснить ответ (после того, как выяснилось, где произошла ошибка), я просто удалил @adjustedLow из второго оператора select.

Ответы на вопрос(3)

declare @cur cursor
declare @idx int       
declare @Approval_No varchar(50) 

declare @ReqNo varchar(100)
declare @M_Id  varchar(100)
declare @Mail_ID varchar(100)
declare @temp  table
(
val varchar(100)
)
declare @temp2  table
(
appno varchar(100),
mailid varchar(100),
userod varchar(100)
)


    declare @slice varchar(8000)       
    declare @String varchar(100)
    --set @String = '1200096,1200095,1200094,1200093,1200092,1200092'
set @String = '20131'


    select @idx = 1       
        if len(@String)<1 or @String is null  return       

    while @idx!= 0       
    begin       
        set @idx = charindex(',',@String)       
        if @idx!=0       
            set @slice = left(@String,@idx - 1)       
        else       
            set @slice = @String

            --select @slice       
            insert into @temp values(@slice)
        set @String = right(@String,len(@String) - @idx)       
        if len(@String) = 0 break


    end
    -- select distinct(val) from @temp


SET @cur = CURSOR FOR select distinct(val) from @temp


--open cursor    
OPEN @cur    
--fetchng id into variable    
FETCH NEXT    
    FROM @cur into @Approval_No 

      --
    --loop still the end    
     while @@FETCH_STATUS = 0  
    BEGIN   


select distinct(Approval_Sr_No) as asd, @ReqNo=Approval_Sr_No,@M_Id=AM_ID,@Mail_ID=Mail_ID from WFMS_PRAO,WFMS_USERMASTER where  WFMS_PRAO.AM_ID=WFMS_USERMASTER.User_ID
and [email protected]_No

   insert into @temp2 values(@ReqNo,@M_Id,@Mail_ID)  

FETCH NEXT    
      FROM @cur into @Approval_No    
 end  
    --close cursor    
    CLOSE @cur    

select * from @tem

который присваивает значения переменным, чтобы также возвращать данные пользователю. Код ниже будет работать нормально, потому что я объявил 1 локальную переменную, и эта переменная используется в операторе выбора.

 Begin
    DECLARE @name nvarchar(max)
    select @name=PolicyHolderName from Table
    select @name
    END

Приведенный ниже код выдаст ошибку «Оператор SELECT, который присваивает значение переменной, не должен сочетаться с операциями извлечения данных», поскольку мы извлекаем данные (PolicyHolderAddress) из таблицы, но ошибка говорит, что операция извлечения данных недопустима, когда вы использовать некоторую локальную переменную как часть оператора выбора.

 Begin
    DECLARE @name nvarchar(max)
    select 
       @name = PolicyHolderName,
       PolicyHolderAddress 
    from Table
 END

Вышеприведенный код можно исправить, как показано ниже,

Begin
    DECLARE @name nvarchar(max)
    DECLARE @address varchar(100)
    select 
       @name = PolicyHolderName,
       @address = PolicyHolderAddress 
    from Table
END

Поэтому либо удалите операцию извлечения данных, либо добавьте дополнительную локальную переменную. Это устранит ошибку.

 San Krish31 янв. 2017 г., 10:35
@Matas Я пытаюсь получить самую короткую строку города вместе с ее длиной, поэтому я попробовал нижеSELECT TOP 1 @SHORTEST_CITY = S.CITY, LEN(S.CITY) AS LENGTH FROM STATION S ORDER BY LENGTH DESC;, Но я получаюA SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations. , Я намерен сортировать по длине не по алфавиту. Есть мысли по этому поводу?
 Govind06 февр. 2017 г., 09:15
@SanKrish Вы можете попробовать это, ОБЪЯВИТЬ SHORTEST_CITY nvarchar (max) ОБЪЯВИТЬ ДЛИНУ varchar (100) ВЫБЕРИТЕ ТОП 1 SHORTEST_CITY = S.CITY, LENGTH = LEN (S.CITY) ОТ СТАНЦИИ S ЗАКАЗ ПО ЛЕНЕ (S.CITY) DESC; выберите SHORTEST_CITY выберите ДЛИНА
Решение Вопроса

@low а также@day локальные переменные;@adjustedLow значение не присваивается ни одной переменной, и это вызывает проблему:

Проблема здесь:

select 
    top 1 @low = low
    , @day = day
    , @adjustedLow  -- causes error!
--select high
from 
    securityquote sq
...

Подробное объяснение и обходной путь:Сообщения об ошибках SQL Server - Сообщение 141. - Оператор SELECT, который присваивает значение переменной, нельзя сочетать с операциями извлечения данных.

 GôTô14 окт. 2015 г., 14:36
Хорошо, предоставленный обходной путь не позволяет вам одновременно получить набор результатов и передать одно из значений в переменную. В общем, если вам нужно сделать это (не здесь, я знаю), тогда вам нужно написать и выполнить запрос дважды :(
 Ramy05 янв. 2011 г., 20:10
Спасибо! спасатель!

Ваш ответ на вопрос