如何在insert sql语句中使用参数传递列名

时间:2010-05-31 07:43:01

标签: sql-server-express sql-server-2005-express

如何在insert sql语句中使用参数传递列名 e.g。

@name='name'
insert into employees (id,@name) values(1,'a')

这可能吗?

1 个答案:

答案 0 :(得分:0)

不可能您需要在应用程序中或在SQL Server本身中使用动态SQL构建包含该列的SQL语句。

编辑: RE:“什么是动态sql”。方法如下。

DECLARE @Value nvarchar(100)
DECLARE @InsertString nvarchar(1000)
DECLARE @name sysname

SET @name ='name'
SET @Value = 'a'

SET @InsertString= 'INSERT INTO EMPLOYEES (id,' + @name + ') values(1, @Value)'


EXEC sp_executesql @InsertString, N'@Value nvarchar(100)', @Value 

然而,它有两个问题。第一个@name必须是SQL注入证明。出于同样的原因,您还需要为@Value使用参数。但是,必须事先指定其数据类型,这意味着它不适用于所有列。因此,在反思中,您最好在应用程序层中执行此操作。 (注意:关于SQL注入的相同注意事项仍然适用,您的应用程序代码需要为列添加正确类型的参数)