1

挿入SQLステートメントでパラメーターを使用して列名を渡す方法例:

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

これは可能ですか?

4

1 に答える 1

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 

ただし、2つの問題があります。最初の@nameはSQLインジェクションプルーフである必要があります。同じ理由で、@Valueのパラメーターも使用する必要があります。ただし、そのデータ型は事前に指定する必要があります。つまり、すべての列に適しているわけではありません。したがって、リフレクションでは、アプリケーション層でこれを行う方がよいでしょう。(注:SQLインジェクションに関する同じ考慮事項が引き続き適用され、アプリケーションコードで列に正しいタイプのパラメーターを追加する必要があります)

于 2010-06-06T12:32:55.663 に答える