SQL Server中的列名称“Columnname”无效

时间:2015-10-01 16:49:40

标签: c# sql sql-server

Foo

我正在从C#代码执行此过程。成功创建表,然后抛出异常,

  

无效的列名称'VisitedClothesKids'
  列名称“InitialCount”

无效

请帮忙!非常感谢:)

2 个答案:

答案 0 :(得分:2)

问题是串联的字符串本身没有将值放在引号中:

values('+@VisitedClothesKids+','+@InitialCount+')'

变为

values(VisitedClothesKids,0)'

当你想要它

values('VisitedClothesKids','0')'

我们还应警告您,您在此处使用的技术对SQL注入是开放的,应该避免使用。

答案 1 :(得分:0)

要解决此类问题,您必须查看正在执行的语句。例如,如果您这样做(为表名传递“MyData”):

PRINT @AddRecord;
EXEC(@AddRecord);

您会看到以下内容作为输出:

insert into MyData_Table(UserActivityData,DataValue) values(VisitedClothesKids,0)'

哪个失败,因为SQL不知道“VisitedClothesKids”是什么。您希望语句为

insert into MyData_Table(UserActivityData,DataValue) values('VisitedClothesKids',0)'

用引号指定文字字符串。为此,请修改“build语句:

SET @AddRecord = 'insert into '+@Username+'_Table(UserActivityData,DataValue)
values('''+@VisitedClothesKids+''','+@InitialCount+')'

在此上下文中,SQL将解释(或“转义”)两个单引号''作为单引号'