sp错误中的sql变量表名

时间:2017-06-19 07:57:19

标签: sql-server stored-procedures

我想创建更新程序,我收到以下错误;

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

3 个答案:

答案 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 +''''+',

谢谢大家