2016-11-29 85 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

您可以删除PARA1-N成#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) 

编辑 - 我要指出,我只看到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()会导致注入漏洞,它将会在变量内转义文本。 –