sqlserver动态语句执行问题,请大神指教

奇点码农 2018-08-28 10:59:28
Declare @str nvarchar(1000);
Declare @temp1 nvarchar(100);
set @temp1='aaa';
begin
set @str='INSERT INTO Tablename([BatchID]) VALUES('+@temp1+')';
EXEC sp_executesql @str;
end


执行后报错:
消息 207,级别 16,状态 1,第 1 行
Invalid column name 'aaa'

之前没有这样写过,不知道为什么会报不存在的列呢?'aaa'写在value中的啊,请大神详解
...全文
206 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2018-08-28
  • 打赏
  • 举报
回复
引用 2 楼 cdc8596 的回复:
[quote=引用 1 楼 yenange 的回复:]
Declare @str nvarchar(1000);
Declare @temp1 nvarchar(100);
set @temp1='aaa';
begin
set @str='INSERT INTO Tablename([BatchID]) VALUES('''+@temp1+''')';
PRINT @str;
EXEC sp_executesql @str;
END


你忘记在值的两边加单引号了。
不过, 最好的方式还是用变量传参数, 不要直接拼sql .

感谢大神指点[/quote]
不客气, 没事就结贴吧
奇点码农 2018-08-28
  • 打赏
  • 举报
回复
引用 1 楼 yenange 的回复:
Declare @str nvarchar(1000);
Declare @temp1 nvarchar(100);
set @temp1='aaa';
begin
set @str='INSERT INTO Tablename([BatchID]) VALUES('''+@temp1+''')';
PRINT @str;
EXEC sp_executesql @str;
END


你忘记在值的两边加单引号了。
不过, 最好的方式还是用变量传参数, 不要直接拼sql .

感谢大神指点
吉普赛的歌 2018-08-28
  • 打赏
  • 举报
回复
Declare @str nvarchar(1000);
Declare @temp1 nvarchar(100);
set @temp1='aaa';
begin
set @str='INSERT INTO Tablename([BatchID]) VALUES('''+@temp1+''')';
PRINT @str;
EXEC sp_executesql @str;
END


你忘记在值的两边加单引号了。
不过, 最好的方式还是用变量传参数, 不要直接拼sql .
卖水果的net 2018-08-28
  • 打赏
  • 举报
回复

-- 凑个热闹

create table Tablename(BatchID  varchar(30))
go
  Declare @str nvarchar(1000);
  Declare @temp1 nvarchar(100);
  set @temp1='aaa';
  begin
  -- set @str='INSERT INTO Tablename([BatchID]) VALUES('+@temp1+')';
  set @str='INSERT INTO Tablename([BatchID]) VALUES(@batch)';
  EXEC sp_executesql @str,N'@batch varchar(30)',@temp1
  select * from Tablename
  end
go
drop table Tablename
go

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧