Вы не упоминаете, что / где находится функция dbo_GetPrevNameCatAsOfDate ().
Все, что работает на стороне сервера 100% sql (например, представление), потребует от вас преобразования функции VBA в то, что мы вызываемфункция «масштабирования» в T-SQL. Таким образом, вы можете переписать вышеуказанную функцию VBA в функцию T-SQL. После того, как вы создадите эту функцию, а затем ТОЛЬКО В Access SQL, как вы можете использовать пользовательскую функцию VBA в любом sql, вы можете сделать то же самое в T-SQL.
В большинстве случаев эту пользовательскую функцию VBA вы использовалив Access SQL, скорее всего, довольно короткая функция, поэтому преобразование таких функций в функции T-sql (они называются функциями масштабирования) приведет к тому же процессу разработки.
Единственным недостатком является то, что, хотя вы можете использовать точно такое же имя функции в t-sql, к сожалению, все функции масштабирования требуют префикса схемы (я ДЕЙСТВИТЕЛЬНО желаю, чтобы это было не так). Так что, если вы вырезаете и вставляете клиентскую часть Access SQL в SSMS и создаете представление? Ну, вы должны добавить DBO. перед именем функции. Но в целом воссоздание функции VBA как T-SQL - отличная идея для таких проектов миграции. У меня была пользовательская функция GST () в VBA. А чтобы переместить sql и части в SQL, я заново создал функцию GST () в T-SQL и, таким образом, смог продолжать использовать функцию GST () в моих запросах и представлениях t-sql.
Последнее, но не менее важное?
Что ж, на стороне клиента доступа вы, несомненно, будете связаны с представлением. Итак, создайте запрос на стороне клиента в связанном представлении, и затем вы можете включить свою пользовательскую функцию VBA.
Если вам действительно нужно и вы хотите использовать связанное представление, а не запрос клиента на основе связанного представления. затем вы можете просто заново создать пользовательскую функцию VBA в качестве функции масштабирования t-sql, а затем продолжать использовать эту функцию в любом запросе t-sql, включая представления.
Таким образом, клиентский запрос для связанногопросмотр может включать + использовать вашу функцию. Однако для простоты использования и лучшей производительности рассмотрите возможность создания этой подпрограммы функции VBA в качестве подпрограммы t-sql. Хотя t-sql несколько ограничен по сравнению с VBA, он имеет циклы, строковые выражения, возможность запроса и практически тот же набор функций, которые вы найдете в типичной подпрограмме VBA, особенно те, которые используются как часть запроса sql. как выражение.
Редактировать
У вас есть это:
AND (dbo_GetPrevNameCatAsOfDate( dbo_Name.ID, Date() = 'FM') )
Это не выглядит правильно. Предполагается, что эта функция возвращает некоторую строку, и у вас есть:
dbo_GetPrevNameCatAsOfDate( dbo_Name.ID, Date()
Это должно быть:
dbo_GetPrevNameCatAsOfDate( dbo_Name.ID, Date() )
Не важно, где, когда или что вы делаете с этимфункция, но вам нужна закрывающая скобка для функции. Как я уже говорил, вам также нужно добавить к схеме ЛЮБУЮ функцию масштабирования. Таким образом, мы получаем:
dbo.dbo_GetPrevNameCatAsOfDate( dbo_Name.ID, Date() )
ОДНАКО, в SQL-сервере нет функции date (). Вы должны использовать GETDATE ()
ОДНАКО ОДНАКО !! GETDATE () вернется сегодня и ТАКЖЕ часть времени.
Итак, если вы хотите только сегодня, и только дату, а не дату?
Тогда вы должны использовать это:
CAST (GETDATE() AS DATE)
Итак, теперь у нас есть это допустимое выражение:
dbo.dbo_GetPrevNameCatAsOfDate( dbo_Name.ID, CAST (GETDATE() AS DATE) )
А затем с помощью вышеупомянутой функции предполагается, что она возвращает varChar, так что теперь мы можем поменять вышеприведенное на ваше гдепредложение, и мы получаем:
AND
(
dbo.dbo_GetPrevNameCatAsOfDate( dbo_Name.ID, CAST (GETDATE() AS DATE) ) = 'FM'
)
Таким образом, нет DATE () t-sql. И вы должны использовать префикс dbo.