Входные значения ПУСТОГО УКАЗАТЕЛЯ Хранимой процедуры T-SQL заставляют избранный оператор перестать работать

Попробуйте с помощью this и .find() сослаться на падение тока в

$(this).find(".inner-bar").toggle();

$(document).ready(function(){
  $(".inner-link").click(function(){
      $(this).find(".inner-bar").toggle();
  });
});
[112 ]

6
задан Cade Roux 22 December 2008 в 01:47
поделиться

6 ответов

Я думаю, что Вам нужно что-то вроде этого для каждого возможно пустого параметра:

AND (aCode = @aCode OR (aCode IS NULL AND @aCode IS NULL))
10
ответ дан 8 December 2019 в 13:03
поделиться

Я думаю, что это должно работать с, ОБЪЕДИНЯЮТ функцию. Попробуйте это:

CREATE PROCEDURE sp_myDuplicateCheck
 @userId int,
 @noteType char(1),
 @aCode char(3),
 @bCode char(3), 
 @cCode char(3),
 @outDuplicateFound int OUT
AS
BEGIN

SET @outDuplicateFound = (SELECT Top 1 id FROM codeTable 
                          WHERE userId = @userId
                          AND noteType = @noteType
                          AND COALESCE(aCode,'NUL') = COALESCE(@aCode,'NUL')
                          AND COALESCE(bCode,'NUL') = COALESCE(@bCode,'NUL')
                          AND COALESCE(cCode,'NUL') = COALESCE(@cCode,'NUL')
                          )
-- Now set the duplicate output flag to a 1 or a 0
IF (@outDuplicateFound IS NULL) OR (@outDuplicateFound = '') OR (@outDuplicateFound = 0)
 SET @outDuplicateFound = 0
ELSE 
 SET @outDuplicateFound = 1
END

Удачи!

Jason

1
ответ дан 8 December 2019 в 13:03
поделиться

Попробуйте это:

CREATE PROCEDURE sp_myDuplicateCheck
     @userId int = 0,
     @noteType char(1) = "",
     @aCode char(3) = "", 
     @bCode char(3) = "", 
     @cCode char(3) = "",
     @outDuplicateFound int OUT
    AS
    BEGIN
    SET @outDuplicateFound = (SELECT Top 1 id FROM codeTable 
                              WHERE @userId in (userId ,0)
                              AND @noteType in (noteType,"")
                              AND @aCode in (aCode , "")
                              AND @bCode in (bCode , "")
                              AND @cCode in (cCode ,"")
                              )
    -- Now set the duplicate output flag to a 1 or a 0
    IF (@outDuplicateFound IS NULL) OR (@outDuplicateFound = '') OR (@outDuplicateFound = 0)
     SET @outDuplicateFound = 0
    ELSE 
     SET @outDuplicateFound = 1
    END

То, что это в основном делает, должно предоставить значения по умолчанию входным параметрам в случае пустого указателя и затем в, где условие проверяет, только если значения не равны значениям по умолчанию.

0
ответ дан 8 December 2019 в 13:03
поделиться

Если я понимаю Ваш вопрос правильно, то я поощряю Вас проводить немного исследования на:

SET ANSI_NULLS OFF

Если Вы используете эту команду в своей хранимой процедуре, то можно использовать = ПУСТОЙ УКАЗАТЕЛЬ в сравнении. Смотрите на следующий пример кода, чтобы видеть, как это работает.

Declare @Temp Table(Data Int)

Insert Into @Temp Values(1)
Insert Into @Temp Values(NULL)

-- No rows from the following query
select * From @Temp Where Data = NULL

SET ANSI_NULLS OFF

-- This returns the rows where data is null
select * From @Temp Where Data = NULL

SET ANSI_NULLS ON

Каждый раз, когда Вы SET ANSI_NULLS Прочь, это - хорошая практика для задержки его к НА как можно скорее, потому что это может влиять на другие запросы, которые Вы выполняете позже. Весь НАБОР управляет, только влияют на текущую сессию, но в зависимости от Вашего приложения, это могло охватить несколько запросов, который является, почему я предлагаю, чтобы Вы повернулись, ansi аннулирует назад на сразу после этого запроса.

7
ответ дан 8 December 2019 в 13:03
поделиться

Я сначала добавил бы проверку, чтобы видеть, были ли все параметры пустыми во время выполнения, т.е.

IF(COALESCE(@userId, @noteType, @aCode, @bCode, @cCode) IS NULL)
   BEGIN
       -- do something here, log, print, return, etc.
   END

Затем после проверки этого, пользователь передал что-то в Вас, может использовать что-то вроде этого в Вашем операторе Where

WHERE userId = COALESCE(@userId, userId)
AND noteType = COALESCE(@noteType, noteType)
AND aCode    = COALESCE(@aCode, aCode)
AND bCode    = COALESCE(@bCode, bCode)
AND cCode    = COALESCE(@cCode, cCode)

Править: Я, возможно, пропустил намерение, что, если параметр был передан в как пустой указатель, который означает, Вы явно хотите протестировать столбец на пустой указатель. Мой выше, где пункт предположил, что пустой параметр означал, 'пропускает тест на этом столбце'.

С другой стороны, я полагаю, что можно использовать исходный запрос и добавить, что опция набора ANSI_NULLS в хранимой процедуре создает время. Например,

SET ANSI_NULLS OFF
GO
CREATE PROC sp_myDuplicateCheck....

Эффективно это должно позволить Вашему коду затем оценивать column=null в противоположность столбцу, является пустым. Я думаю, что Kalen Delaney однажды выдумал опции ANSI_NULLS и QUOTED_IDENTIFIER как 'липкие опции', потому что, если они установлены в процедуре, создают время, они остаются с процедурой во время выполнения, независимо от того, как соединение в то время установлено.

0
ответ дан 8 December 2019 в 13:03
поделиться

SET ANSI_NULLS OFF / On

Таким образом можно сделать colName = null

0
ответ дан 8 December 2019 в 13:03
поделиться
Другие вопросы по тегам:

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