Буквально самый простой способ исправить NullReferenceExeption имеет два пути. Если у вас есть GameObject, например, с прикрепленным скриптом и переменной с именем rb (rigidbody), эта переменная начнет пустую, когда вы начнете игру. Вот почему вы получаете NullReferenceExeption, потому что на компьютере нет данных, хранящихся в этой переменной.
В качестве примера я буду использовать переменную RigidBody. Мы можем добавить данные действительно легко на самом деле несколькими способами:
rb = GetComponent<Rigidbody>();
. Эта строка кода работает лучше всего под ваши функции Start()
или Awake()
. rb = AddComponent<RigidBody>();
Дальнейшие заметки: если вы хотите, чтобы единство добавлялось компонент для вашего объекта, и вы, возможно, забыли добавить его, вы можете ввести [RequireComponent(typeof(RigidBody))]
над объявлением класса (пробел ниже всех ваших приложений). Наслаждайтесь и получайте удовольствие от игр!
Я был бы очень удивлен, если бы вы могли обнаружить какую-либо разницу между WHERE col LIKE '[0-9]'
и любыми другими методами, которые вы придумали. Но я согласен с Денисом, отложил это в функции, чтобы вы последовательно использовали одну и ту же проверку во всем своем коде (или, по крайней мере, если вы избегаете UDF из-за большого сканирования и т. Д., Поместите маркер в свой код, который будет упростить изменение в более широком масштабе позже).
Тем не менее, вы наверняка увидите больше производительности, просто используя скалярный UDF, чем тот метод, который вы используете для анализа внутри функции , Вы действительно должны сравнивать производительность UDF и делать это с помощью CASE
. например,
SELECT Postal = CONVERT(INT, CASE WHEN SUBSTRING(postal,2,1) LIKE '[0-9]'
THEN SUBSTRING(postal, 2,1) END)
FROM ...
Это даст NULL
, если символ не является числовым.
Если вы имеете дело только с проверкой локальных переменных, то действительно не имеет значения, что такое синтаксический анализ метод, который вы используете, и вам лучше сосредоточиться на своих усилиях по оптимизации в другом месте.
ИЗМЕНИТЬ добавление предложения к продемонстрированному предложению JOIN
. Это потенциально приведет к менее постоянному сканированию, но будет намного более читаемым (гораздо меньше вызовов подстроки и т. Д.):
;WITH v AS
(
SELECT /* other columns, */ patientPostal,
ss = SUBSTRING(v.patientPostal,2,1),
FROM [whatever table is aliased v in current query]
)
SELECT /* column list */
FROM [whatever table is aliased z in current query]
INNER JOIN v ON z.postal = CONVERT(INT, CASE
WHEN v.ss = '0' THEN ss
WHEN v.ss LIKE '[1-9]' THEN LEFT(v.patientPostal, 3)
END);
Взгляните на IsNumeric, IsInt, IsNumber , у него есть проверки для этих трех типов
Лучший способ сделать это:
IF SUBSTRING(@postal,2,1) LIKE [0-9]
CAST(SUBSTRING(@postal,2,1) AS int)