动态SQL INSERT VALUES SQL 2008

时间:2016-11-29 13:01:25

标签: sql sql-server-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 个答案:

答案 0 :(得分:1)

您可以将Para1-n拖放到#Temp表中,然后执行动态插入。

这里的好处是你没有解析或引用参数

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

Select  P1=@Para1,P2=@Para2,P3=@Para3,P4=@Para4,P5=@Para5,P6=@Para6,P7=@Para7,P8=@Para8,P9=@Para9,P10=@Para10 Into TempInsert 
Declare @SQL varchar(max) = '
Insert Into '+@DynamicTableName +'(
        HolidayStartDate
      , HolidayEndDate
      , HolidayType
      , HolidayTypeID
      , StaffCode
      , StaffName
      , Notes
      , FTE
      , CreatedBy
      , CreatedDate
      , HolidayRequestID
    ) Select * From #TempInsert'
Exec(@SQL)

编辑 - 我应该注意,我只看到10个参数,但你有11个字段。

答案 1 :(得分:0)

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

SET @QueryStr = 'INSERT INTO ' +@TableName+ '(     
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)