我收到错误。请知道我错了。 我正在制作
final JmsBatcher jmsBatcher =
new JmsBatcher(connection, "single", "batch", 25);
new Thread(() -> {
while (true) {
jmsBatcher.processBatch();
}
}).start();
我收到错误。请帮助我,我错了
Msg 207,Level 16,State 1,Line 4
列名'france'无效。
答案 0 :(得分:1)
如果您使用参数,则不会遇到此问题。问题是缺少单引号。您可以添加它们,但正确的解决方案是:
set @SqlStr = N'Insert into #ComplianceTem (name,email)
select name, Email from '+@SR+'
union
select name, Email from store_2 s where 1=1 and s.sub = @sub
';
print @sqlstr
execute sp_executesql @SQLstr, N'@sub nvarchar(50)', @sub = @sub;
您无法将表名添加为参数,但可以在where
中添加值。
编辑:
如果您正在构建SQL字符串,那么我建议采用replace()
方法:
set @SqlStr = N'Insert into #ComplianceTem (name,email)
select name, Email from @SR
union
select name, Email from store_2 s where 1=1 and s.sub = ''@sub''
';
set @SqlStr = replace(@SqlStr, '@SR', @SR);
set @SqlStr = replace(@SqlStr, '@sub', @sub);
. . .
不鼓励使用用户输入替换字符串中的值,因为它会将服务器打开到SQL注入攻击。您可以使用quotename
作为表名来解决此问题:
set @SqlStr = replace(@SqlStr, '@SR', quotename(@SR));
但是,您不希望@sub
执行此操作,因为它会更改查询的含义。