2017-04-19 9 views
0

내가 데이터 보관에 대한 책임 응용 프로그램을 쓰고 있어요 우리가 데이터베이스 테이블이 구성에 직면 그래서

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

의 구성을 가지고, 나는 모든 보관해야 SQL Server 저장 프로 시저에 변수 전달 MetricTime 값이 3 일 전인 DeviceData 테이블의 데이터

I이 동적으로 수행하고 그 이유는 테이블 이름과 열 이름이 저장 프로 시저

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 dbo.GetDynamicDataForArchive 'DeviceData', 'MetricTime', '2017-04-16 20:29:29.647' 

이 결과

그래서 datetime2를 전달하는 방법 또는 where 절을 구성하는 방법이 있습니다.

답변

0

이 문 교체 :

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

내가하지 특히 ​​비록 VARCHAR 값으로 날짜를 변환하는 것을 좋아한다

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

으로는, 아마도 (이 할 수있는 더 좋은 방법이 ?).