2016-11-29 4 views
0

Работа над проектом, для которого требуется процедура с именем динамической таблицы. Необходимо выяснить, как написать запрос значения insert в таблицу. Не масштабный проект, поэтому накладные расходы и тому подобное не являются проблемой.Динамические 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

Вы можете отказаться от para1-п в таблицу #Temp, а затем выполнить динамическую вставку.

Преимущество здесь в том, что у вас нет разбора или цитаты параметры

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) 

EDIT - Я хотел бы отметить, что я вижу только 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() может привести к уязвимости в отношении инъекций. –