ich verantwortlich, eine Anwendung schreibe für die Archivierung von Daten und wir haben die Konfiguration in einer DatenbanktabellePassing in Variablen zu SQL Server gespeicherte Prozedur, wo Klausel
Id | TableName | ColumnName | RetentionAmountInDays
1 | DeviceData | MetricTime | 3
Also, wenn mit dieser Konfiguration konfrontiert, ich alle archivieren sollte Daten in der DeviceData-Tabelle, in der der MetricTime-Wert vor 3 Tagen liegt.
Der Grund, warum ich diese dynamisch tue, ist die Tabellennamen und Spaltennamen unterscheiden
Für jede Konfiguration (es mehrere Zeilen sein würde) diese gespeicherte Prozedur
CREATE PROCEDURE GetDynamicDataForArchive
@TableName nvarchar(100),
@ColumnName nvarchar(100),
@OlderThanDate datetime2(7)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sql nvarchar(1000);
SET @sql = 'SELECT * FROM ' + @TableName + ' WHERE ' + @ColumnName + ' < @OlderThanDate';
exec sp_executesql @sql;
END
und ein Beispiel exec Linie genannt wird,
exec dbo.GetDynamicDataForArchive 'DeviceData', 'MetricTime', '2017-04-16 20:29:29.647'
Daraus ergibt sich:
Conversion failed when converting date and/or time from character string.
Es ist also etwas los mit dem, wie ich die datetime2 übergebe oder wie ich die where-Klausel formiere.