@a是参数 要么再传参一次 :exec sp_executesql @sql ,N'@a nvarchar(50)',@a
要么直接字符串拼接:set @sql='insert into VehicleApply (Id,ApplyPerson,ApplyUnit,WBSCenter,FCNumber,GoTime,PassengersNum,purpose,CarContacts,ContactNumber,ApplyDate,Route,Sign,CTime) values (‘+@a+’,''[admin]'',''asdf'',''adsf'',''11'',GETDATE(),11,''asdf'',''陈师傅'',''13313313131'',GETDATE(),''接人'',''0'',GETDATE())'

解决方案 »

  1.   

    第一部分改成declare @a as nvarchar(50)
    ,@sql varchar(2000)
    set @a='8c4af668-f81f-43e6-9bc4-8d06e2074282'
    set @sql='insert into VehicleApply (ID,ApplyPerson,ApplyUnit,WBSCenter,FCNumber,GoTime,PassengersNum,purpose,CarContacts,ContactNumber
    ,ApplyDate,Route,Sign,CTime) values ('''+@a+''',''[admin]'',''asdf'',''adsf'',''11'',GETDATE(),11,''asdf'',''陈师傅'',''13313313131'',GETDATE(),''接人'',''0'',GETDATE())'
    print @sqlexec(@sql)exec和sp_executesql是有区别的!
      

  2.   

    exec和sp_executesql是有区别的
    学习了下 这个 
    有收获
      

  3.   

    动态执行时,并没传入变量@a当然通不过咯
    楼主有空可以好好了解一下
    http://www.51testing.com/html/46/n-223846.html