我正在努力让这句话得以运行
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行 ')'附近的语法不正确。
我该如何解决这个问题?
答案 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
答案 2 :(得分:0)
使用current_timestamp而不是插入语句中的GetDate(),使用current_timestamp。
SET @SelectStatement = 'INSERT INTO [ArchiveProcessHistory] VALUES (' + @TableName + ',' + @TotalRowsSource +',' + @TotalRowsDestination + ',' + current_timestamp + ') '