2015-03-13 70 views
0
DECLARE @resultado int; 
SET @resultado = (SELECT COUNT(serial) FROM inventario 
WHERE serial ='strSerialNumber'); 
IF @resultado = 1 
BEGIN 
    UPDATE inventario SET simnao ='strVariavel8', local ='strVariavel1', portaria ='strVariavel9', galpao ='strVariavel2', sala ='strVariavel3', ute ='strVariavel4', ramal ='5213', centrodecusto ='strVariavel6', etiquetaMonitor ='strVariavel7', data ='date', hora ='time' 
    WHERE serial ='strSerialNumber' 
END 
IF (@resultado = 1) and (data = '') 
BEGIN 
    UPDATE inventario SET simnao ='strVariavel8', local ='strVariavel1', portaria ='strVariavel9', galpao ='strVariavel2', sala ='strVariavel3', ute ='strVariavel4', ramal ='5213', centrodecusto ='strVariavel6', etiquetaMonitor ='strVariavel7', data ='date', hora ='time' 
END 
IF @resultado = 0 
BEGIN 
    INSERT INTO inventario (serial, hostname, simnao, usuario, local, portaria, galpao, sala, UTE, ramal, centrodecusto, etiquetamonitor, data, hora) 
    VALUES ('strSerialNumber','strHostname','strVariavel8','strUsuario','strVariavel1','strVariavel9','strVariavel2','strVariavel3','strVariavel4','3215','strVariavel6','strVariavel7','date','time') 
END 

我有這段代碼,這應該是工作,但sql acuses,我沒有一個名爲'數據'的列名稱,但我當然有,如果我更改'數據'對於任何其他列,sql指責相同的錯誤,但與其他列名稱,有人可以幫忙?如果在sql「無效的列名」

+3

的MySQL或SQL Server ...?數據是SQL中的一個保留字,即需要被分隔的「數據」。 – jarlh 2015-03-13 13:14:36

+1

您可以僅在SQL語句中使用不是來自Transact-SQL的列名稱。 「IF」中的'data'不在SQL語句中。 – 2015-03-13 13:19:30

+0

「數據」沒有在任何地方定義。你使用它像一個變量,而不是列名。 SQL Server應該如何知道這是一個列名,它應該如何知道哪一行與''進行比較?如果「數據」是「inventario」表中的一列,那麼您需要從您感興趣的特定行中選擇特定列,以便獲得該列的值。 – pmbAustin 2015-03-13 13:22:15

回答

0

一種可能性是IF語句更改爲類似這樣:

IF (@resultado = 1) AND EXISTS (SELECT 1 FROM inventario 
           WHERE serial = 'strSerialNumber' AND data = '') 

這對於單列你發現那裏的序列號是「strSerialNumber」爲空字符串檢查「數據」的價值,如果該行存在,則返回true。如果該值不是「',那麼該行不存在,並且IF測試將失敗,我認爲這是你想要的。

0

答案是一個可變的申報數據,像這樣:

DECLARE @resultado int; 
 
DECLARE @data1 varchar(15); 
 
SET @data1 = (SELECT data FROM inventario WHERE serial ='strSerialNumber'); 
 
SET @resultado = (SELECT COUNT(serial) FROM inventario WHERE serial ='strSerialNumber'); 
 
IF @resultado = 1 AND @data1 IS NOT NULL OR @data1 != '' 
 
BEGIN 
 
SET @resultado = 10 
 
END 
 
IF (@resultado = 1) AND @data1 is null or @data1 = '' 
 
BEGIN 
 
UPDATE inventario SET simnao ='strVariavel8 ', local ='strVariavel1', portaria ='strVariavel9', galpao ='strVariavel2', sala ='strVariavel3', ute ='strVariavel4', ramal ='7567', centrodecusto ='strVariavel6', etiquetaMonitor ='strVariavel7', data ='date', hora ='time' WHERE serial ='strSerialNumber' 
 
set @resultado = 5 
 
END