У меня есть функция, которая работает так, как мне бы хотелось, но мне нужно добавить одну вещь, и я пока не могу этого сделать.Автоматический выбор правильной базы данных в функции
Вот массово упрощен скелет функции, которая уже работает:
create function IC
(
@A date
)
returns table
as
return
(
SELECT *
FROM db1.dbo.table a LEFT JOIN
db1.dbo.table2 b
on a.randomfield=b.randomfield
where datefield = @a
)
Так что теперь я могу использовать эту функцию, чтобы назвать дату конкретной версии запроса я хотел. Большой! Теперь проблема в том, что я хочу сделать это полезным с течением времени. datefield - дата архива, а данные в этом году находятся в другой базе данных, чем данные 2015 года, которая находится в другой базе данных, чем в 2014 году, и т. д. Я хочу, чтобы функция смотрела на год @ a, а затем используйте это, чтобы определить, какая база данных запрос против. Я пробовал разные вещи, которые не сработали, но похоже, что Dynamic SQL - это ответ, который каждый приходит на межсетевые экраны.
Я хочу как-то использовать инструкцию if ... else, но не смог собрать это вместе. Любые предложения о том, как действовать?
Вы попробовали случай когда конец? –
Вы хотите сказать, что хотите избежать использования динамического SQL? Если да, то в порядке с необходимостью изменять функцию каждый год (или каждый раз, когда создается новая база данных, которую вам нужно читать)? –
Вам в значительной степени нужно будет использовать динамический sql здесь ... но у вас есть проблема. Вы пытаетесь сделать это в функции, и вы не можете использовать динамический sql в функции. Слишком плохо, что вы не разбивали таблицы вместо создания нескольких копий базы данных. –