Sql UPDATE语句不更新表

Sql UPDATE语句不更新表,sql,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(

我在执行此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表中的datetime字段。

您是否检查过要传递的任何变量是否为空?这可能会导致整个
@sql
变量也为空。尝试使用Print()打印
@sql
变量,以检查它是否正确


您还可以运行探查器来查看正在执行的操作。

您是否检查过要传递的任何变量是否为空?这可能会导致整个
@sql
变量也为空。尝试使用Print()打印
@sql
变量,以检查它是否正确


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

如果您的任何字段为null,那么@sql将为null(包含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)

如果您的任何字段为null,那么@sql将为null(包含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)

你的问题是你的where声明

WHERE [itemCode] = "' + @itemCode + '"; '
您需要将字符串用单引号(')而不是双引号(“)。在字符串中转义字符串时,需要将单引号加倍

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

您还可以看看。它有一个更简洁的语法来处理参数。

您的问题是where语句

WHERE [itemCode] = "' + @itemCode + '"; '
您将希望用单引号(')而不是双引号(“)来包装字符串。在字符串中转义它们时,需要将单引号加倍

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

你也可以看看。它有一个更简洁的语法来处理参数。

我不明白为什么您甚至需要动态地将
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

我不明白为什么您甚至需要动态地将
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

您是否尝试过使用print()语句来检查@recordExists的值是否与您认为的值相同?是的,@recordExists的值正在正确填充。Exec(@sql)将始终尝试并执行btw,就像只执行一条语句一样,您需要一个开始/结束包装器尝试打印其他变量的值,以确保获得所需的值。是否尝试使用print()语句检查@recordExists的值是否与您认为的值相同?是的,@recordExists的值正在正确填充。Exec(@sql)将始终尝试并执行btw,就好像只执行一条语句一样,您将需要一个开始/结束包装器尝试打印其他变量的值,以确保获得所需的值。