2016-02-18 69 views
0

我有以下SQL:必须声明标量变量表

DECLARE @HospitalReport TABLE (Registrator VARCHAR (20)) 

INSERT INTO @HospitalReport (Registrator) 
VALUES("64") 

SELECT 
    @HospitalReport.Registrator 
FROM 
    @HospitalReport 

IF Registrator > 0 
BEGIN 
    SELECT 
     Database.dbo.Users.Firstname, Database.dbo.Users.Lastname 
    FROM 
     StradaAnv.dbo.Anvandare 
    WHERE 
     Id = Registrator 

    IF Firstname != NULL AND Lastname != NULL 
    BEGIN 
     UPDATE @HospitalReport 
     SET Registrator = Firstname + ' ' + Lastname 
     WHERE Registrator = Registrator 
    END 
END 

SELECT * FROM @HospitalReport 

当我运行这段代码,我得到以下错误:

Msg 137, Level 16, State 1, Line 9
Must declare the scalar variable "@HospitalReport"

我看到了什么,我已经宣布@HospitalReport作为表?

+2

使用** **别名为表 –

+2

另外,你**不能**与具有标准相等和非相等运算符的NULL进行比较 - 你必须使用** FirstName IS NULL(或“IS NOT NULL”) –

回答

1

请勿将所有内容分解为程序步骤。告诉系统你想要什么,不怎么办呢

DECLARE @HospitalReport TABLE (Registrator VARCHAR (20)) 

INSERT INTO @HospitalReport (Registrator) 
VALUES("64") 

UPDATE H 
SET Registrator = Firstname + ' ' + Lastname 
FROM 
    @HospitalReport H 
     INNER JOIN 
    StradaAnv.dbo.Anvandare A 
     ON 
      H.Registrator = A.Registrator 
WHERE A.Firstname IS NOT NULL AND 
     A.Lastname IS NOT NULL 

SELECT * FROM @HospitalReport 

即我不是第一次查询桌子。然后看看特定的列是否为空。然后决定是否执行更新。我在单个查询中描述了整个操作,然后让优化器计算出如何最好地执行此任务。


其中,如上所示,应该使用IS NULL操作者而不是!=因为NULL做既不等于不不等于NULL