SQL Server 2005 - 动态插入查询问题

时间:2012-05-14 10:31:06

标签: sql-server-2005

我正在努力让这句话得以运行

SET @SelectStatement = 'INSERT INTO [ArchiveProcessHistory] VALUES (' + @TableName + ',' + @TotalRowsSource +',' + @TotalRowsDestination + ',' + GetDate()') '

[我知道上述陈述有问题,我无法解决)

SET @FullStatement = @SelectStatement 

ArchiveProcessHistory表结构是:

TableName - nvarch(5)
TotalRowsSource - integer
TotalRowsDestination - integer
DateofInsert - Date

当我运行sp_executesql

时,它给了我这个错误
  

Msg 102,Level 15,State 1,Procedure usp_ArchiveTable,第39行   ')'附近的语法不正确。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

SET @SelectStatement = 'INSERT INTO [ArchiveProcessHistory] VALUES (' + @TableName + ',' + @TotalRowsSource +',' + @TotalRowsDestination + ',' + GetDate() + ') '

+之后遗失了一个getdate()

答案 1 :(得分:1)

为了避免潜在的SQL注入攻击,您可以使用sp_executesql代替。

declare @SelectStatement nvarchar(max)

set @SelectStatement = 
  'INSERT INTO [ArchiveProcessHistory] VALUES
    (@TableName, @TotalRowsSource, @TotalRowsDestination, GetDate())'

exec sp_executesql @SelectStatement,
                   N'@TableName nvarchar(5), @TotalRowsSource int, @TotalRowsDestination int',
                   @TableName = '123', 
                   @TotalRowsSource = 4, 
                   @TotalRowsDestination = 5

您还应该查看The Curse and Blessings of Dynamic SQL

答案 2 :(得分:0)

使用current_timestamp而不是插入语句中的GetDate(),使用current_timestamp。

SET @SelectStatement = 'INSERT INTO [ArchiveProcessHistory] VALUES (' + @TableName + ','   + @TotalRowsSource +',' + @TotalRowsDestination + ',' + current_timestamp + ') '