Sql UPDATE语句不更新表
我在执行此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(
@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,就好像只执行一条语句一样,您将需要一个开始/结束包装器尝试打印其他变量的值,以确保获得所需的值。