繁体   English   中英

SQL Server中的无效列名“ Columnname”

[英]Invalid column name 'Columnname' in SQL Server

alter procedure NewUserTableCreation(@Username varchar(50))
as
    declare @CreateUserTable NVARCHAR(MAX)
    declare @AddRecord NVARCHAR(MAX)
    declare @VisitedClothesKids varchar(50)='VisitedClothesKids'
    declare @InitialCount varchar(20)='0'
BEGIN
    --Building query for creating a user table
    SET @CreateUserTable = 'create table ' + @Username +
                           '_Table(UserActivityData varchar(50),DataValue varchar(20))'
    EXEC(@CreateUserTable);

    --Adding Records in the user table
    SET @AddRecord = 'insert into ' + @Username + '_Table(UserActivityData, DataValue)
                      values(' + @VisitedClothesKids + ','  + @InitialCount + ')'
    EXEC(@AddRecord);
END
GO

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

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

请帮忙! 非常感谢 :)

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

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

变成

values(VisitedClothesKids,0)'

当你想成为

values('VisitedClothesKids','0')'

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

为了解决这种问题,您必须查看正在执行的语句。 例如,如果您这样做(将“ 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会将两个单引号''解释(或“转义”)为单引号'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM