我在执行此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表中定义为日期时间字段。
答案 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)