2016-04-14 6 views
2

Я пытаюсь создать представление, которое будет использоваться в хрустальных отчетах, что позволит нам искать GL-коды. К сожалению, наша ERP каждый год создает новую таблицу SQL и добавляет последние 2 цифры в имя таблицы.Выберите другую таблицу на основе года

Если я не могу найти способ изменить ту таблицу, на которую она смотрит, исходя из даты, мне нужно будет вручную менять представление каждый год для каждого из создаваемых мной видов. Любой совет?

This Year: select * from GL000016 
Next Year: select * from GL000017 

ответ

0

Вы можете использовать функцию T-SQL Year.

Возвращает целое число, которое представляет год указанной даты.

https://msdn.microsoft.com/en-us/library/ms186313.aspx

Так как в этом году, следующий будет возвращаться 17.

select (YEAR(GETDATE()) % 100) + 1 
2

Вот версия MSSQL:

DECLARE @SQLQuery AS NVARCHAR(500) 
DECLARE @TableName AS NVARCHAR(100) 
SET @TableName = 'GL0000' + RIGHT(CONVERT(CHAR(4), GETDATE(), 120),2) 
SET @SQLQuery = 'SELECT * FROM ' + @TableName 
EXECUTE sp_executesql @SQLQuery 

Можно также использовать хранимую процедуру в зависимости на окружающую среду. @Tablename будет содержать имя таблицы, если это все, что вам нужно (т. Е. SELECT @Tablename).

+0

Это выглядит хорошо. Я положу это в SP и посмотрю, смогут ли все мои приложения запустить его таким образом. – Hexxxer

0

Не точно можно переключать таблицы динамически для Просмотры

Если вы хотите переключить таблицу вы выбираете из, вам потребуется использовать IF заявления или сделать Динамический SQL. Учитывая, что вы хотите сделать это в представлении, оба из них недоступны для вас. Так что с моей точки зрения, ваши варианты:

  1. переключатель использовать хранимую процедуру и использовать динамический SQL или если заявления
  2. переключатель использовать функцию, которая возвращает таблицу (опять же, динамический SQL или если заявления)
  3. Задача Sql, которая периодически запускает хранимую процедуру, которая использует динамический sql для повторного создания представления с правильным именем таблицы счетов GL.

Если вам нужно использовать представление, то 3, вероятно, ваш вариант, но он оснащен служебными и служебными служебными данными. Следующий человек, работающий над этим проектом, может задаться вопросом, почему изменения их взглядов продолжают переписываться.

+1

. Накладные расходы на обслуживание и передачу: я нахожу, что четкий комментарий в верхней части динамически воссозданного представления идет очень долго. :-) –

0

Создайте временную таблицу, соответствующую общей структуре таблицы GL0000XX.

Затем вам необходимо использовать динамический SQL для запроса ваших таблиц.

CREATE TABLE #GL ....; 

DECLARE @year char(2) = YEAR(GETDATE()) % 100; 

INSERT INTO #GL 
EXEC('SELECT * FROM GL0000' + @year); 
+0

Возможная проблема: как бы система отчетов по нисходящему потоку доступа к этой временной таблице? –