2011-09-21 128 views
0

我有一个问题,得到此UPDATE语句执行。没有错误返回,它只是不更新​​表。UPDATE语句不更新表

@recordExists varchar(10), 
@fileName varchar(50), 
@itemCode varchar (50), 
[email protected] datetime, 
@submittedBy varchar(30), 
@revision varchar(50), 
@itemCode5 varchar(50), 
@itemCkDigit varchar(10), 
@suffix varchar(10) 

AS 

DECLARE @sql varchar(1000) 
DECLARE @uploadDate datetime 
SET @uploadDate = GetDate() 
    -- Establish update or insert in to the graphics info table. 
IF @recordExists = 'Y' 

     SET @sql = 'UPDATE tblGraphicInfo SET [uploadDate] = ''' + CONVERT(nvarchar(20), @uploadDate) + ''', [submittedBy] = ''' + @submittedBy + ''' WHERE [itemCode] = "' + @itemCode + '"; ' 
     EXEC(@sql) 
ELSE 

任何帮助,将不胜感激。

仅供参考,我改变了过去的日期,因为我认为这是问题。 uploadDate字段在tblGraphicInfo表中定义为日期时间字段。

+0

您是否尝试过把打印()语句来检查,如果@recordExists的值是什么你认为这是什么? – Maciej

+0

是@recordExists的值正确填充。 – htm11h

+0

Exec(@sql)将总是尝试并执行btw,就好像只执行单个语句一样,您需要一个BEGIN/END包装器 –

回答

1

您的问题是你的声明

WHERE [itemCode] = "' + @itemCode + '"; ' 

你会想在单引号(')不包括双引号(“)包装字符串。在字符串中转义它们时,您需要加倍单引号。

WHERE [itemCode] = ''' + @itemCode + '''; ' 

您可能还会看到sp_executsql。它有一个非常干净的句法来处理参数。

0

您是否检查过您是否有任何传入的变量为空?这可能会导致整个@sql变量也为空。尝试使用Print()打印您的@sql变量以检查它应该是什么。

您也可以运行分析器来查看正在执行的内容。

0

如果任何字段为空@sql将为空(Concatinating null returns null)。

是否有您使用EXEC而不是做任何理由..

@recordExists varchar(10), 
@fileName varchar(50), 
@itemCode varchar (50), 
[email protected] datetime, 
@submittedBy varchar(30), 
@revision varchar(50), 
@itemCode5 varchar(50), 
@itemCkDigit varchar(10), 
@suffix varchar(10) 

AS 

DECLARE @sql varchar(1000) 
DECLARE @uploadDate datetime 
SET @uploadDate = GetDate() 
    -- Establish update or insert in to the graphics info table. 
IF @recordExists = 'Y' 

     UPDATE tblGraphicInfo SET [uploadDate] = @uploadDate, [submittedBy] = @submittedBy WHERE [itemCode] = @itemCode 
ELSE 

此外,如果你内部的执行多个行,如果其他人则需要将其包装在BEGIN END

其实你可以做以下相反,@@ ROWCOUNT如果前面的语句修改任何记录= 0将测试等必须插入

UPDATE tblGraphicInfo SET [uploadDate] = @uploadDate, [submittedBy] = @submittedBy WHERE [itemCode] = @itemCode 

if @@ROWCOUNT=0 then 

INSERT into tblGraphicInfo (uploadDate,submittedBy,itemCode) values (@uploadDate,@submittedBy,@itemCode) 
2

我不明白为什么你甚至会需要动态地串起来,你UPDATE声明 - 只需使用:

DECLARE @sql varchar(1000) 

DECLARE @uploadDate datetime 
SET @uploadDate = GetDate() 

-- Establish update or insert in to the graphics info table. 
IF @recordExists = 'Y' 

    UPDATE dbo.tblGraphicInfo 
    SET [uploadDate] = CONVERT(NVARCHAR(20), @uploadDate), 
     [submittedBy] = @submittedBy 
    WHERE [itemCode] = @itemCode 

ELSE