2013-11-28 2 views
1

Я создал скалярную функцию, которая должна вытолкнуть дату в определенном формате на основе переменной. по какой-то причине я получаю сообщение об ошибке «else»MS SQL скалярная функция для форматирования datebased on laguage switch

что я делаю неправильно?

CREATE FUNCTION [dbo].[fGetDateformat] (@datum datetime,@CNotation char(2)) 
/* accepts datum and CNotation 
USAGE: 
select fGetDateformat(datum, "EN" or "DE") */ 
returns varchar(25) AS 
BEGIN 
declare @ReturnStr varchar(25) 
if @Cnotation = 'DE' 
set language german 
set @ReturnStr = 
DATENAME(dd, @datum)+'. '+DATENAME(MM, @datum)+' '+ DATENAME(YEAR, @datum) 
else 
set @ReturnStr = DATENAME(mm, @datum)+' '+DATENAME(dd, @datum)+', '+ DATENAME(YEAR, @datum) 
return @ReturnStr 
END 
GO 
+0

Какую версию SQL Server вы используете? Если вы в 2012 году, вы можете просто использовать функцию формата. – Mithrandir

+0

Это похоже на то, что должно быть обработано в вашем прикладном уровне, а не в SQL. Вы также не можете установить язык внутри функции, вы получите следующую ошибку: 'Недопустимое использование оператора боковой обработки 'SET COMMAND' внутри функции. Если это необходимо сделать в SQL, я бы предложил таблицу календаря с столбцы для разных форматов даты в разных странах, тогда вы можете сделать что-то вроде 'CASE WHEN @Cnotation = 'DE' THEN GermanDateString WHEN @Cnotation = 'US' THEN USDateString ELSE DefaultDateString END' – GarethD

+0

очень согласны с тем, что он должен обрабатываться на прикладном уровне , Я использую систему управления судебными делами, которая предлагает sql как среду сценариев для генерации писем. Уровень приложения не предоставляет доступ к их форматированию здесь (они есть в другом месте), поэтому я застрял с SQL. думал о календарной таблице, но хотел избежать усилий, используя команду set language ... – jrady

ответ

0

Если T-SQL блок охватывает несколько строк, вы должны заключить его в begin и end. Например, это не будет работать:

if 1=1 
    print 'One is one!' 
    print 'Yay' 
else 
    print 'Huh?' 

Это будет:

if 1=1 
    begin 
    print 'One is one!' 
    print 'Yay' 
    end 
else 
    print 'Huh?' 

Обратите внимание, что print 'Huh?' все еще в порядке, так как это одна строка.

Смежные вопросы