Я нашел ответ сам. испытать превосходство Вот он
var userId = localStorage.getItem('keyName');
var dbRefName = firebase.database().ref().child('Web App').child('Users').child(userId).child('Name');
dbRefName.on("value", function(snapshot) {
console.log(snapshot.val());
document.getElementById('Name').value = snapshot.val();
}, function (errorObject) {
console.log("The read failed: " + errorObject.code);
});
И тег ввода должен выглядеть вот так.
<input type="text"
id="Name"
class="form-control form-control-alternative"
placeholder="User Name"
>
Я просто взглянул на связанную статью и могу подтвердить, что срывание может перестать работать и для ОБЪЕДИНИТЬ и для ISNULL.
Это, кажется, перестало работать, если у Вас есть какой-либо включенный подзапрос, но это хорошо работает для скалярных функций и трудно кодированных значений.
Например,
DECLARE @test INT
SET @test = 1
PRINT 'test2'
SET @test = COALESCE(@test, (SELECT COUNT(*) FROM sysobjects))
SELECT 'test2', @test
-- OUCH, a scan through sysobjects
ОБЪЕДИНИТЕ реализован согласно стандарту ANSI. Это - просто сокращение от Оператора выбора. ISNULL не является частью стандарта ANSI. Раздел 6.9, кажется, не требует срывания явно, но это действительно подразумевает что первый истинный пункт в when
оператор должен быть возвращен.
Вот некоторое доказательство, которое является работами для основанных на скаляре функций (я выполнил его на SQL Server 2005):
CREATE FUNCTION dbo.evil
(
)
RETURNS int
AS
BEGIN
-- Create an huge delay
declare @c int
select @c = count(*) from sysobjects a
join sysobjects b on 1=1
join sysobjects c on 1=1
join sysobjects d on 1=1
join sysobjects e on 1=1
join sysobjects f on 1=1
return @c / 0
END
go
select dbo.evil()
-- takes forever
select ISNULL(1, dbo.evil())
-- very fast
select COALESCE(1, dbo.evil())
-- very fast
Вот некоторое доказательство, что конкретная реализация со СЛУЧАЕМ выполнит запросы sub.
DECLARE @test INT
SET @test = 1
select
case
when @test is not null then @test
when @test = 2 then (SELECT COUNT(*) FROM sysobjects)
when 1=0 then (SELECT COUNT(*) FROM sysobjects)
else (SELECT COUNT(*) FROM sysobjects)
end
-- OUCH, two table scans. If 1=0, it does not result in a table scan.
Я был также удивлен видеть тот ответ работы! Я не уверен, что это поведение гарантируется. (Но я не смог найти пример, который не работает!)
Пять лет SQL, и я все еще удивлен.
Я также шел вперед и сделал еще одно изменение:
INSERT INTO #Fractions VALUES (0, 0)
SELECT Numerator
,Denominator
,coalesce (
CASE WHEN Denominator = 0 THEN 0 ELSE NULL END,
CASE WHEN Numerator <> 0 THEN Numerator / Denominator ELSE NULL END)
AS TestCalc
FROM #Fractions
Результат, который я получил, был:
Numerator Denominator TestCalc
1 1 1
1 2 0.5
1 3 0.3333333333333335
1 0 0
2 0 0
3 0 0
0 0 0
Теперь я еще более смущен! Для случая, когда num=0 и den=0, как, я получаю testcalc как 0 (тем более, что я удалил 0 после последнего случая!)?
Эффективный способ гарантировать короткое замыкание в SQL Server MS к варианту использования. Для успеха, КОГДА пункт, никакие другие не оценены.
ОБЪЕДИНИТЕ может иметь проблемы
В этом экземпляре, почему имеет столько ответвлений в ОБЪЕДИНИТЬ/ЗАКЛЮЧИТЬ В КОРПУС конструкциях?
SELECT Numerator
,Denominator
,CASE
WHEN Denominator = 0 THEN 0 END,
ELSE Numerator / Denominator
END AS TestCalc
FROM Fractions