Jayanta Modak Ответов: 2

Все время показывать нулевое значение, пожалуйста, помогите мне...


Все время показывать нулевое значение
Пожалуйста, помогите мне, что не так в моем коде

Что я уже пробовал:

declare @mxdbvlu  int
 declare @dbvlunm int
  set @mxdbvlu= (select max(Database_name) from TBL_FY_SELECT_1)
 if @mxdbvlu = null 
 set @dbvlunm=1000
 else 
 set @dbvlunm=sum(@mxdbvlu+1)
  select @dbvlunm,@mxdbvlu

2 Ответов

Рейтинг:
2

OriginalGriff

Если я создам таблицу с двумя столбцами: ID (int, Identity) и Database_name (NVARCHAR, MAX) и запущу ваш код, я действительно получу NULL, NULL.

Но добавьте две строки данных:

ID      Database_name
1       AAAA      
2       AAAB
А я нет - я получаю исключение, потому что оно не может преобразовать "ААА" в целое значение.
Если я заменю данные на это:
ID      Database_name
1       1111      
2       1112
Тогда я получаю "разумные" данные:
(No column name) (No column name)
1113             1112
Таким образом, ваш выбор имени столбца явно ошибочен: вы не можете поместить туда имя.

И я могу повторить ваш провал только тогда, когда нет строк - так что начните с проверки ваших данных.

Но... если вы используете это для создания новой базы данных с последовательными именами каждый раз, когда вы добавляете некоторые данные, то это, вероятно, плохой дизайн. Я настоятельно рекомендую вам переосмыслить, почему именно вы решили, что это будет хорошим решением - как с точки зрения "почему я не использовал столбец идентичности?" POV, а также подход "какого черта мне вообще нужны новые базы данных, это просто глупо".


Рейтинг:
0

Richard Deeming

Я вижу две очевидные проблемы с вашим кодом:

if @mxdbvlu = null 
Если один или оба операнда являются NULL, операторы сравнения (=, !=) будет возвращать UNKNOWN Это ни истинно, ни ложно, так что If ответвление не будет выполнено.

Чтобы проверить, является ли значение NULL, использовать Is Null вместо:
IS NULL (Transact-SQL) - SQL Server | Microsoft Docs[^]
SQL и ловушка трехзначной логики - простой разговор[^]

set @dbvlunm=sum(@mxdbvlu+1)
Поскольку вы не вычисляете агрегат по набору записей, вам не нужно Sum(...) здесь. Просто использовать:
set @dbvlunm = @mxdbvlu + 1