2017-04-19 10 views
0

私はアーカイブデータを担当するアプリケーションを書いていますし、私たちはデータベースのテーブルこの構成に直面しているので、

Id | TableName | ColumnName | RetentionAmountInDays 
1  | DeviceData | MetricTime | 3 

で設定を持って、私はすべてアーカイブする必要がありますSQL Serverのストアドプロシージャに変数を渡しますMetricTime値が3日前のDeviceDataテーブルのデータ。各設定について

私はこれをやっている理由は、動的にテーブル名と列名は、(複数の行が存在することになる)異なっている

このストアドプロシージャが

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 

そして例のexecラインと呼ばれています

exec dbo.GetDynamicDataForArchive 'DeviceData', 'MetricTime', '2017-04-16 20:29:29.647' 

これは、その結果

したがって、datetime2をどのように渡しているのか、where節をどのように作成しているのかが分かります。

答えて

0

この文を置き換えます

SET @sql = 'SELECT * FROM ' + @TableName + ' WHERE [' + @ColumnName + '] < ''' + cast(@OlderThanDate as varchar(23)) + ''''; 

によって

SET @sql = 'SELECT * FROM ' + @TableName + ' WHERE ' + @ColumnName + ' < @OlderThanDate' 

を私は特にしかしvarchar型の値に日時を変換するために持っているような、おそらくこれを行うには良い方法はありません( ?)。