2016-11-29 12 views
0

動的テーブル名を持つプロシージャを必要とするプロジェクトで作業する。表に挿入値の問合せを書き込む方法を理解する必要があります。大規模なプロジェクトではないので、間接費などは問題ではありません。動的SQL INSERT VALUES SQL 2008

しかし、それはいつも転倒します。

DECLARE @DynamicTableName NVARCHAR(100) 
SET @DynamicTableName = 'DynamicTableName' 


    INSERT @DynamicTableName 
    (
     HolidayStartDate 
     , HolidayEndDate 
     , HolidayType 
     , HolidayTypeID 
     , StaffCode 
     , StaffName 
     , Notes 
     , FTE 
     , CreatedBy 
     , CreatedDate 
     , HolidayRequestID 
    ) 
    VALUES 
    (  @Para1, 
      @Para2, 
      @Para3, 
      @Para4, 
      @Para5, 
      @Para5, 
      @Para6, 
      @Para7, 
      @Para8, 
      @Para9, 
      @Para10 
    ) 
+2

オブジェクト識別子は変数で参照できません。文字列内でSQLを構築し、 'sp_executeSQL'を呼び出します。これは入力パラメータをサポートしています。 –

答えて

1

あなたは#TEMPテーブルにPARA1-Nを削除した後、動的挿入を行うことができます。

ここ利益はEDITあなたがパースや引用のパラメータに

DECLARE @DynamicTableName NVARCHAR(100) 
SET @DynamicTableName = 'DynamicTableName' 

Select [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected] Into TempInsert 
Declare @SQL varchar(max) = ' 
Insert Into '[email protected] +'(
     HolidayStartDate 
     , HolidayEndDate 
     , HolidayType 
     , HolidayTypeID 
     , StaffCode 
     , StaffName 
     , Notes 
     , FTE 
     , CreatedBy 
     , CreatedDate 
     , HolidayRequestID 
    ) Select * From #TempInsert' 
Exec(@SQL) 

を持っていないということです - 私は唯一の10のパラメータを参照してください、まだあなたは11個のフィールドを持っていることに注意してください。

0
DECLARE @TableName NVARCHAR(100),@QueryStr NVARCHAR(MAX) = '' 

SET @QueryStr = 'INSERT INTO ' [email protected]+ '(  
HolidayStartDate,HolidayEndDate,HolidayType, HolidayTypeID, StaffCode 
, StaffName, Notes, FTE, CreatedBy, CreatedDate, HolidayRequestID) 
VALUES ('+ @Para1 +','+ @Para2 +','+ @Para3 +','+ @Para4 +','+ @Para5 +','+ 
@Para5 +','+ @Para6 +','+ @Para7 +','+ @Para8 +','+ @Para9 +','+ @Para10 +')' 

EXEC (@QueryStr) 
+0

sp_executeSQLはパラメータとして扱われる場合、変数内のテキストをエスケープするため、EXEC()はインジェクションの脆弱性を引き起こす可能性があります。 –