Выполнение динамического SQL в функции 2005 года SQLServer

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
20
задан Rob 5 July 2011 в 08:51
поделиться

4 ответа

Это "обычно" не может делаться как функции обработок SQL Server как детерминированное, что означает, что для данного набора исходных данных, это должно всегда возвращать те же выводы. Хранимая процедура или динамический sql могут быть недетерминированы, потому что это может изменить внешнее состояние, такое как таблица, на которую полагаются.

, Учитывая, что в SQL-сервере функции всегда детерминированы, это была бы плохая идея с будущей точки зрения обслуживания, чтобы попытаться обойти это, поскольку это могло вызвать довольно главный беспорядок для любого, кто должен поддерживать код в будущем.

15
ответ дан 30 November 2019 в 01:06
поделиться

Можно обойти это путем вызова расширенной хранимой процедуры со всей сопутствующей стычкой и проблемами безопасности.

http://decipherinfosys.wordpress.com/2008/07/16/udf-limitations-in-sql-server/

http://decipherinfosys.wordpress.com/2007/02/27/using-getdate-in-a-udf/

2
ответ дан 30 November 2019 в 01:06
поделиться

Поскольку функции должны играть приятно с оптимизатором запросов существует довольно много ограничений на них. Эта ссылка обращается к статье, которая обсуждает ограничения UDF's подробно.

0
ответ дан 30 November 2019 в 01:06
поделиться

Спасибо всем за ответы.

Ron: к вашему сведению, Используя это бросит ошибку.

я соглашаюсь, что не выполнение, что я первоначально предназначил, является лучшим решением, я решил пойти другим путем. Мои два варианта состояли в том, чтобы использовать sum(cast(BINARY_CHECKSUM(*) as float)) или выходной параметр в хранимой процедуре. После скорости поблочного тестирования каждого я решил пойти с sum(cast(BINARY_CHECKSUM(*) as float)) для получения сопоставимого значения контрольной суммы для данных каждой таблицы.

0
ответ дан 30 November 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: