SQL无效列名错误

SQL无效列名错误,sql,sql-server,Sql,Sql Server,这是工作查询 @tc varchar(11), @urun nvarchar(50), @islem nvarchar(20), @ilk_agirlik nvarchar(4), @son_Agirlik nvarchar(4) AS BEGIN SET NOCOUNT ON; DECLARE @tabloadi NVARCHAR(15) declare @sutunadi1 nvarchar(max) set @sutunadi1 = @urun+N'_'+@islem+N'_ilk' de

这是工作查询

@tc varchar(11),
@urun nvarchar(50),
@islem nvarchar(20),
@ilk_agirlik nvarchar(4),
@son_Agirlik nvarchar(4)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @tabloadi NVARCHAR(15)
declare @sutunadi1 nvarchar(max)
set @sutunadi1 = @urun+N'_'+@islem+N'_ilk'
declare @sutunadi2 nvarchar(max)
set @sutunadi2 = @urun+N'_'+@islem+N'_son'
SET @tabloadi=@tc
IF EXISTS(SELECT *
            FROM INFORMATION_SCHEMA.COLUMNS
            WHERE TABLE_NAME=@tabloadi
                AND COLUMN_NAME=@sutunadi1)
BEGIN 
    declare @sql nvarchar(max)
    SET @Sql = N'insert into dbo.' + QUOTENAME(@Tc)
      + N'(' + QUOTENAME(@sutunadi1)+ N',' + QUOTENAME(@sutunadi2) + N',   gun, ay, yil, saat, dakika) ' 
      + N'VALUES (' + @ilk_agirlik+ N',' + @son_agirlik + N',' + convert(varchar(2),day(GETDATE())) + N',' + convert(varchar(2),month(GETDATE())) + N',' + convert(varchar(4),year(GETDATE()))  + N',' + convert(varchar(2),datepart(hh,GETDATE())) + N',' + convert(varchar(2),datepart(mi,GETDATE())) + N')'
   EXECUTE sp_executesql @Sql 
END     
当我在表中添加了两列名称为urun和islem时 我刚刚更改了这个代码

    SET @Sql = N'insert into dbo.' + QUOTENAME(@Tc)
      + N'(' + QUOTENAME(@sutunadi1)+ N',' + QUOTENAME(@sutunadi2) + N',   gun, ay, yil, saat, dakika, urun, islem) ' 
      + N'VALUES (' + @ilk_agirlik+ N',' + @son_agirlik + N',' + convert(varchar(2),day(GETDATE())) + N',' + convert(varchar(2),month(GETDATE())) + N',' + convert(varchar(4),year(GETDATE()))  + N',' + convert(varchar(2),datepart(hh,GETDATE())) + N',' + convert(varchar(2),datepart(mi,GETDATE())) + N',' + @urun + N',' + @islem + N')'
它会产生一个错误,即“列名无效”
错误是什么,我刚刚在工作查询中添加了两列???

尝试将最后一行替换为:

+ N'VALUES (' + @ilk_agirlik+ N',' + @son_agirlik + N',' + convert(varchar(2),day(GETDATE())) + N',' + convert(varchar(2),month(GETDATE())) + N',' + convert(varchar(4),year(GETDATE()))  + N',' + convert(varchar(2),datepart(hh,GETDATE())) + N',' + convert(varchar(2),datepart(mi,GETDATE())) + N',''' + @urun + N''',''' +@islem + N''')'

问题解决了。当我使用char(39)和concat解决时,thanx Kannan Kandasamy为解决方案

  SET @Sql = concat('insert into dbo.', QUOTENAME(@Tc),
         '(', QUOTENAME(@sutunadi1),',',QUOTENAME(@sutunadi2) ,', gun, ay,   yil, saat, dakika, urun, islem) ' 
          ,'VALUES (' , @ilk_agirlik,',' , @son_agirlik ,',',convert(varchar(2),day(GETDATE())) ,',',convert(varchar(2),month(GETDATE())) ,',' ,  convert(varchar(4),year(GETDATE()))  ,',' , convert(varchar(2),datepart(hh,GETDATE())) ,',' , convert(varchar(2),datepart(mi,GETDATE())) ,',' , char(39), @urun,char(39),',',  char(39),@islem,char(39) ,')')

varchar的日期必须在select和use CONCAT()中使用quotesUse CHAR(39),而不是在执行@SQL之前+打印@SQL,以查看语句是否有问题。我尝试使用CONCAT(),但它不起作用,我无法理解其他解决方案-我应该在哪里使用CHAR(39)我打印了@sql,我认为问题在于引号-插入到dbo中。[14993458014]([chi ipura_Fileto_ilk],[chi ipura_Fileto_son],gun,ay,yil,saat,dakika,urun,islem)值(11,2,3,42017,23,51,ew,eee)