我想创建更新程序,我收到以下错误;
Msg 102,Level 15,State 1,Procedure sp_name,Line 30 [Batch Start Line 9] 更新'附近的语法不正确。
如何写出正确的程序请帮帮我? 我无法解决问题 我的程序如下;
@tablo nvarchar(100),
@kayit nvarchar(50),
@inceleme nvarchar(50),
@icevap nvarchar(50),
@tespit nvarchar(MAX),
@scevap nvarchar(MAX),
@aksiyon nvarchar(50),
@mutalaa nvarchar(MAX),
@tamamlanma nvarchar(100),
@not nvarchar(MAX),
@izleme nvarchar(50),
@kaydeden nvarchar(50),
@idd int,
@kullanici nvarchar(50),
@yil int,
@donem int
as
DECLARE @sql as varchar(max)
SET @sql = 'select ID into #a from ' + @tablo +
' where yil='+ cast(@yil as varchar(100)) +' and donem='+ cast(@donem
as varchar(100)) +' and (ilkkaydeden is null or ilkkaydeden='') and
(kull='+ cast(@kullanici as varchar(100)) +' or kull1='+
cast(@kullanici as varchar(100)) +' or kull2='+ cast(@kullanici
as varchar(100)) +')'
exec(@sql)
IF EXISTS(SELECT * FROM #a WHERE ID=@idd) BEGIN
'update '+@tablo+'
set
kayitzamani='+@kayit+',
incelendimi='+@inceleme+',
cevap='+@icevap+',
ites='+@tespit+',
icevabi='+@scevap+',
iaksiyon='+@aksiyon+',
ison='+@mutalaa+',
ieksiklik='+@tamamlanma+',
inotlar='+@not+',
izleme='+@izleme+',
ilkkaydeden='+@kaydeden+'
where
ID='+@idd
END
ELSE BEGIN
'update '+@tablo+'
set
kayitzamani='+@kayit+',
incelendimi='+@inceleme+',
cevap='+@icevap+',
ites='+@tespit+',
icevabi='+@scevap+',
iaksiyon='+@aksiyon+',
ison='+@mutalaa+',
ieksiklik='+@tamamlanma+',
inotlar='+@not+',
izleme='+@izleme+',
sonkaydeden='+@kaydeden+'
where
ID='+@idd
END;
go
答案 0 :(得分:0)
分配下一个文字: -
'update '+@tablo+'
set
kayitzamani='+@kayit+',
incelendimi='+@inceleme+',
cevap='+@icevap+',
ites='+@tespit+',
icevabi='+@scevap+',
iaksiyon='+@aksiyon+',
ison='+@mutalaa+',
ieksiklik='+@tamamlanma+',
inotlar='+@not+',
izleme='+@izleme+',
ilkkaydeden='+@kaydeden+'
where
ID='+@idd
变量
作为下一个
SET @sql ='update '+@tablo+'
set
kayitzamani='+@kayit+',
incelendimi='+@inceleme+',
cevap='+@icevap+',
ites='+@tespit+',
icevabi='+@scevap+',
iaksiyon='+@aksiyon+',
ison='+@mutalaa+',
ieksiklik='+@tamamlanma+',
inotlar='+@not+',
izleme='+@izleme+',
ilkkaydeden='+@kaydeden+'
where
ID='+@idd
然后添加下一行: -
exec(@sql)
完整代码: -
@tablo nvarchar(100),
@kayit nvarchar(50),
@inceleme nvarchar(50),
@icevap nvarchar(50),
@tespit nvarchar(MAX),
@scevap nvarchar(MAX),
@aksiyon nvarchar(50),
@mutalaa nvarchar(MAX),
@tamamlanma nvarchar(100),
@not nvarchar(MAX),
@izleme nvarchar(50),
@kaydeden nvarchar(50),
@idd int,
@kullanici nvarchar(50),
@yil int,
@donem int
as
DECLARE @sql as varchar(max)
SET @sql = 'select ID into #a from ' + @tablo +
' where yil='+ cast(@yil as varchar(100)) +' and donem='+ cast(@donem
as varchar(100)) +' and (ilkkaydeden is null or ilkkaydeden='') and
(kull='+ cast(@kullanici as varchar(100)) +' or kull1='+
cast(@kullanici as varchar(100)) +' or kull2='+ cast(@kullanici
as varchar(100)) +')'
exec(@sql)
SET @sql = 'IF EXISTS(SELECT * FROM #a WHERE ID=@idd) BEGIN' +
'update '+@tablo+'
set
kayitzamani='+@kayit+',
incelendimi='+@inceleme+',
cevap='+@icevap+',
ites='+@tespit+',
icevabi='+@scevap+',
iaksiyon='+@aksiyon+',
ison='+@mutalaa+',
ieksiklik='+@tamamlanma+',
inotlar='+@not+',
izleme='+@izleme+',
ilkkaydeden='+@kaydeden+'
where
ID='+ cast(@idd as varchar(100))
+ 'END
ELSE
BEGIN ' +
'update '+@tablo+'
set
kayitzamani='+@kayit+',
incelendimi='+@inceleme+',
cevap='+@icevap+',
ites='+@tespit+',
icevabi='+@scevap+',
iaksiyon='+@aksiyon+',
ison='+@mutalaa+',
ieksiklik='+@tamamlanma+',
inotlar='+@not+',
izleme='+@izleme+',
sonkaydeden='+@kaydeden+'
where
ID='+cast(@idd as varchar(100)) +
'END; '
exec(@sql) -- Added
go
答案 1 :(得分:0)
您的代码应该是这样的:
DECLARE @sql NVARCHAR(MAX)
DECLARE @a TABLE (
ID int
)
SET @sql = 'select ID from ' + @tablo +
' where yil=@yil and donem=@donem and (ilkkaydeden is null or ilkkaydeden='') and (kull=@kullanici or kull1=@kullanici or kull2=@kullanici )'
INSERT INTO @a
EXEC sp_executesql @sql,
N'@kullanici nvarchar(50),
@yil int,
@donem int,
@Count int output',
@kullanici,
@yil,
@donem,
@Count output
IF EXISTS(SELECT * FROM @a WHERE ID=@idd)
BEGIN
SET @sql = N'update '+@tablo+'
set
kayitzamani=@kayit,
incelendimi=@inceleme,
cevap=@icevap,
ites=tespit,
icevabi=@scevap,
iaksiyon=@aksiyon,
ison=@mutalaa,
ieksiklik=@tamamlanma,
inotlar=@not,
izleme=@izleme,
ilkkaydeden=@kaydeden
where
ID=@idd'
END
...
EXEC sp_executesql @sql, N'@kayit nvarchar(50),
@inceleme nvarchar(50),
@icevap nvarchar(50),
@tespit nvarchar(MAX),
@scevap nvarchar(MAX),
@aksiyon nvarchar(50),
@mutalaa nvarchar(MAX),
@tamamlanma nvarchar(100),
@not nvarchar(MAX),
@izleme nvarchar(50),
@kaydeden nvarchar(50),
@idd int',
@kayit,
@inceleme,
@icevap,
@tespit,
@scevap,
@aksiyon,
@mutalaa,
@tamamlanma,
@not,
@izleme,
@kaydeden,
@idd
答案 2 :(得分:0)
我幸运地解决了我的问题。我把这个字符串添加到了一些代码中izleme ='+''''+ @ izleme +''''+',
谢谢大家