Доступ к системным функциям SQL Server с использованием трех частей именования - PullRequest
0 голосов
/ 04 ноября 2019

Как и ниже, я пытаюсь получить доступ к системной функции CAST (), используя имя базы данных в качестве префикса, но не работает.

SELECT Master.Dbo.CAST(GETDATE() AS DATETIME2),UserDB.dbo.CAST(GETDATE() AS DATETIME2)

Ошибка: Incorrect syntax near the keyword 'AS'.

Замена 'dbo'с 'sys' или '..' не сработало, и похоже, что CAST работает автономно только без префикса.

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

Кто-нибудь знает, как заставить это работать, пожалуйста?

1 Ответ

2 голосов
/ 04 ноября 2019

Если вы хотите отобразить, как отличаются вычисления для datetime до datetime2, вам нужно запустить операторы в контексте 2 разных баз данных с разными настройками совместимости, например:

CREATE DATABASE Test2019DB; --I am Running 2019 Preview Edition
GO

CREATE DATABASE Test2012DB;
GO

ALTER DATABASE Test2012DB SET COMPATIBILITY_LEVEL = 110;
GO

USE Test2019DB;
GO
SELECT CONVERT(datetime2(7),CONVERT(datetime,'2019-11-04T11:23:47.123')) AS DT2_2019;
GO

USE Test2012DB;
GO
SELECT CONVERT(datetime2(7),CONVERT(datetime,'2019-11-04T11:23:47.123')) AS DT2_2012;
GO

USE master;
GO

--clean up
DROP DATABASE Test2019DB;
DROP DATABASE Test2012DB;

Возвращаемые значения:

DT2_2019
2019-11-04 11:23:47.1233333 

DT2_2012
2019-11-04 11:23:47.1230000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...