2016-11-29 4 views
0

Arbeiten an einem Projekt, das eine Prozedur mit einem dynamischen Tabellenname erfordert. Sie müssen herausfinden, wie Sie eine Einfügewertabfrage in die Tabelle schreiben. Kein massives Projekt, so Overheads und so ist kein Problem.Dynamische SQL-INSERTWERTE SQL 2008

Versucht mehrere Variationen aber es fällt immer um.

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

Nicht funktionieren, eine Objekt-ID kann nicht über eine Variable referenziert werden. Konstruieren Sie die SQL innerhalb eines Strings und rufen Sie 'sp_executeSQL' auf, dies unterstützt Eingabeparameter. –

Antwort

1

können Sie die Para1-n-Drop in eine #temp Tabelle und dann einen dynamischen Einsatz durchzuführen.

Der Vorteil hierbei ist, dass Sie nicht Parse oder Zitat Parameter

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 haben - Ich sollte anmerken, dass ich nur 10 Parameter sehen aber Sie haben 11 Felder.

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 ist eine bessere Wahl, da es Text innerhalb der Variablen, wenn sie als Parameter behandelt werden, entkommen wird, kann EXEC() zu Injektionsschwachstellen führen. –