UPDATE语句不更新表

时间:2011-09-21 01:03:56

标签: sql

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

    @recordExists varchar(10),
@fileName varchar(50),
@itemCode varchar (50),
--@uploadDate 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表中定义为日期时间字段。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您的问题是您的声明

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

你需要用单引号(')包装字符串而不是双引号(“)。当你在字符串中转义它们时,你需要将单引号加倍。

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

您也可以查看sp_executsql。它具有更清晰的语法来处理参数。

答案 2 :(得分:0)

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

您还可以运行探查器以查看正在执行的内容。

答案 3 :(得分:0)

如果你的任何字段为null,@ sql将为null(Concatinating null产生null)。

你有没有理由使用EXEC而不是......

   @recordExists varchar(10), 
@fileName varchar(50), 
@itemCode varchar (50), 
--@uploadDate 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 

此外,如果你在if 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)