2014-05-22 71 views
0

我有一個表tabEvent,有11個字段是DateTime。我想查詢tabEvent中的每個DateTime字段,並且如果有任何值''4/1/2014'和< dateDate(),則返回該行。如何從所有DateTime字段獲取所有值,而不用硬編碼字段名稱?

但我不想對字段名進行硬編碼,因爲它們總是在變化(網站正在不斷增長和變形)。

我有下面的代碼片段返回給我的字段名稱,但不是在表上的查詢(還)。

select c.name ColumnName 
from sys.columns c 
join sys.types t on (c.user_type_id = t.user_type_id) 
where object_name(c.OBJECT_ID) = 'tabEvent' 
    and t.name = 'datetime' 
order by c.OBJECT_ID 

英語翻譯:我想每一個我登錄到管理頁面的時間來編寫一個進程即會,檢查已通過(自上次通知)任何關鍵日期的tabEvent表併發送給我的消息,管理員。然後它會將通知日期值更新爲今天,以便下次運行proc。

任何幫助表示讚賞!

回答

0

你可以做到這一點使用動態SQL:

DECLARE @Startdate VARCHAR(10)= '2014-04-01' 
DECLARE @EndDate VARCHAR(10) = convert(VARCHAR(10),GETDATE(),20) 

DECLARE @sql nVARCHAR(max) 

DECLARE @where nVARCHAR(max) 
SELECT @where = ' WHERE ' + STUFF((select c.name + ' BETWEEN ''' + @StartDate + ''' AND ''' + @EndDate + ''' AND ' 
from sys.columns c 
join sys.types t on (c.user_type_id = t.user_type_id) 
where object_name(c.OBJECT_ID) = 'tabEvent' 
    and t.name = 'datetime' 
order by c.OBJECT_ID 
FOR XML PATH('')),1,0,'') 

SELECT @sql = 'SELECT * FROM tabEvent' + LEFT(@where,LEN(@where)-4) 

EXECUTE sp_executesql @sql 
相關問題