decimal val = 0.000000000100m;
string result = val == 0 ? "0" : val.ToString().TrimEnd('0').TrimEnd('.');
SQL Server не имеет видимости переменных уровня блока.
Это за пакетный / сохраненный proc и т. д.
Из MSDN (мой полужирный)
Объем переменной - это диапазон операторов Transact-SQL, которые могут ссылаться на переменную. Объем переменной длится от той точки, которая объявляется до конца партии или хранимой процедуры, в которой она объявлена.
blockquote>
gbn ответил на вопрос, но в соответствующей заметке обратите внимание на такой код:
DECLARE @i INT = 0
WHILE @i < 2
BEGIN
DECLARE @a VARCHAR(100)
IF @i = 0
SET @a = 'changed'
PRINT COALESCE(@a, 'is null')
SET @i = @i + 1
END
При запуске он дважды печатает «изменено», в то время как многие люди, вероятно, ожидают его печати «изменено», затем «равно null». Будьте осторожны при объявлении переменных внутри циклов. Возможно, вы захотите явно указать значение NULL в объявлении. например,
DECLARE @a VARCHAR(100) = NULL
Когда эта модифицированная версия запущена, она отображает «изменено», затем «равно null».