2012-06-14 39 views
0

我有一個表,在該領域中的一個部分,我存儲的字符串是這樣的:使用字段的內容作爲查詢

RMaster.dbo.fnFormatDate (GETUTCDATE(), 'Company_Enroll_YYYY-MM-DD.csv') 

我想用它作爲我可以打電話查詢的一部分從我的C#代碼,所以查詢應該是這樣的:

選擇ThisField,... 從MYTABLE

這是可行的?

謝謝。

+0

你能提供更多的信息嗎?這個公式是否只存儲在一行上,並且你想查詢這個表,包括這個行公式的結果,以及分別存儲在其他行上的相似公式的結果?如果您需要一次執行多行操作,您需要更好地解釋這一點。例如。顯示多個配方!顯示多行!顯示多個列!展現您期望的最終結果!如果您只向我們展示一行,我們無法猜測您需要多行。 –

回答

1

是的,只是通過嵌套生成一個SQL字符串。

SET NOCOUNT ON; 
DECLARE @t TABLE (formula NVARCHAR(MAX)); 
INSERT @t(formula) SELECT 
    'RMaster.dbo.fnFormatDate (GETUTCDATE(), ''Company_Enroll_YYYY-MM-DD.csv'')'; 

DECLARE @sql NVARCHAR(MAX); 

SELECT @sql = N'SELECT ' + formula + ', [other columns] 
    FROM dbo.mytable' FROM @t -- WHERE...; 

PRINT @sql; 
--EXEC sp_executesql @sql; 

編輯

這裏是處理多行方案的一種方式:

SET NOCOUNT ON; 

CREATE TABLE dbo.src(ID INT, formula NVARCHAR(MAX)); 
INSERT dbo.src(ID, formula) SELECT 
    1, 'RMaster.dbo.fnFormatDate (GETUTCDATE(), ''Company_Enroll_YYYY-MM-DD.csv'')' 
    UNION ALL SELECT 
    2, 'RMaster.dbo.fnFormatDate (GETUTCDATE(), 'Foo_MM.DD.YYYY.csv'')'; 

DECLARE @sql NVARCHAR(MAX); 
SET @sql = N''; 

SELECT @sql = @sql + CHAR(13) + CHAR(10) + N'UNION ALL SELECT ID, ' + formula + ' 
    FROM dbo.src WHERE ID = ' + CONVERT(VARCHAR(12), ID) 
    FROM dbo.src -- WHERE...; 

SET @sql = STUFF(@sql, 1, 12, '') + ';'; 

PRINT @sql; 
--EXEC sp_executesql @sql; 

DROP TABLE dbo.src; 

這將產生一個醜陋的聯合查詢:

SELECT ID, RMaster.dbo.fnFormatDate (GETUTCDATE(), 'Company_Enroll_YYYY-MM-DD.csv') 
    FROM dbo.src WHERE ID = 1 
UNION ALL SELECT ID, RMaster.dbo.fnFormatDate (GETUTCDATE(), 'Foo_MM.DD.YYYY.csv') 
    FROM dbo.src WHERE ID = 2; 

你很可能建立一個可怕的和更復雜的CASE動態表達式,但只要在ID上有一個很好的支持索引,以便每個查詢都是單行查詢,這應該沒問題。無論如何,對UDF的調用可能會比查詢的其餘部分更多地殺死你。

+0

謝謝你Aaron ......但我不確定INSERT。您只插入一條記錄,但每條記錄的公式不同......我猜我需要的是不可能的,不是嗎?或者,也許我誤解你的代碼? –

+0

我認爲你需要更好地描述你的問題。 –

+0

好的,我有一個參考表。其中一個字段包含用於生成各種文件名的格式化信息。你看到了這個數據的一個例子,但它只是我需要的模式之一。從我的C#代碼中,我需要調用一個查詢,該查詢將與該引用(查找)表一起加入另一個表,並返回根據上面描述的字段中存儲的格式化信息格式化的文件名。 –