Вам также нужно использовать datetimeoffset
для предложения where
.
Сначала создайте и заполните образец таблицы ( Пожалуйста, сохраните нам этот шаг в ваших будущих вопросах):
DECLARE @T AS TABLE
(
DTO_Created DateTimeOffset
)
INSERT INTO @T(DTO_Created) VALUES
('2017-04-28 03:16:56.942 -05:00'),
('2017-05-01 00:20:54.925 -05:00'),
('2017-05-01 12:17:52.752 -05:00'),
('2017-05-01 23:21:00.198 -05:00'),
('2017-05-02 01:19:23.254 -05:00')
Запрос:
SELECT *
FROM @T
WHERE DTO_Created >= '2017-05-01 00:00:00.000 -05:00'
AND DTO_Created < '2017-05-02 00:00:00.000 -05:00'
Результаты :
DTO_Created
2017-05-01 00:20:54.925 -05:00
2017-05-01 12:17:52.752 -05:00
2017-05-01 23:21:00.198 -05:00
Другой вариант для версии 2016 или выше - использовать AT TIME ZONE
, но вам нужно будет добавить разницу в часах к значению поиска и остерегаться перехода на летнее время. время:
SELECT *
FROM @T
WHERE DTO_Created >= CAST('2017-05-01 05:00:00' AS DateTime2) AT TIME ZONE 'Easter Island Standard Time' -- -05:00
AND DTO_Created < CAST('2017-05-02 05:00:00' AS DateTime2) AT TIME ZONE 'Easter Island Standard Time'
Если вы хотите игнорировать местное время и рассматривать UTC-часть DateTimeOffset
, как если бы это было DateTime
, вы можете просто привести DateTimeOffset
к Date
, хотя это будет предикатом без sargable :
SELECT *
FROM @T
WHERE CAST(DTO_Created As Date) = '2017-05-01'
Это исключит тех, которые иногда создаются при использовании инструмента схематического изображения (они запустят с dt _),
SELECT * FROM information_schema.routines
WHERE OBJECTPROPERTY(OBJECT_ID(SPECIFIC_NAME),'IsMSShipped') =1
AND routine_type = 'PROCEDURE'
можно хотеть исключить системные хранимые процедуры из количества
Один путь состоял бы в том, чтобы звонить:
select count(*) from sysobjects
where xtype = 'P'
and category = 0
and left(name,2) <> 'sp'
Это предполагает, что Вы не снабжаете префиксом свои процедуры SP
Вам нужно столько, сколько Ваше приложение требует. Хранение процедур, маленьких и простых, является хорошей вещью.
Если Вы используете sql 2005, визуальный способ видеть, что Ваше количество proc состоит в том, чтобы перейти в SSMS к Вашему узлу хранимой процедуры под программируемостью. Нажмите View-Object Details, и количество объектов будет отображено справа.
Если Вы используете их, то действительно нет такой вещи как "слишком многие".
У меня был разработчик, заинтересованный его сохраненный procs, использовали слишком много пространства в базе данных, таким образом, я должен был на самом деле вычислить, общий РАЗМЕР всех сохранил procs. Хороший ответ для этого здесь. Результат был то, что размер сохраненного procs вместе был ответственен за, возможно.001% общего размера базы данных.
Ниже запрос, который можно использовать:
select count(*) from sysobjects where xtype='P'
Если весь Ваш доступ дб получает мандат быть через SP, то небо является пределом.
Select count(1) from information_schema.routines
where routine_type = 'PROCEDURE'