错误:消息207,级别16,状态1,行4无效的列名称'france'

时间:2016-01-08 13:13:02

标签: sql

我收到错误。请知道我错了。 我正在制作

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'无效。

1 个答案:

答案 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执行此操作,因为它会更改查询的含义。