Как передать имя столбца с параметром во вставке SQL

Как передать имя столбца с параметром во вставке SQL например

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

Это возможно?

1 ответ

Решение

Нет, это невозможно, вам нужно будет создать инструкцию SQL, включая столбец, в приложении или с помощью динамического SQL в самом SQL Server.

Изменить: 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 

Однако есть 2 проблемы с этим. Первое @name должно быть доказательством SQL-инъекции. По той же причине вы также хотели бы использовать параметр для @Value. Однако тип данных для этого должен быть указан заранее, что означает, что он не подходит для всех столбцов. Поэтому, подумав, вам лучше сделать это на уровне приложений. (Примечание: те же соображения, касающиеся внедрения SQL, по-прежнему применимы, и в коде вашего приложения нужно будет добавить параметр правильного типа для столбца)

Другие вопросы по тегам