我有一個表,在該領域中的一個部分,我存儲的字符串是這樣的:使用字段的內容作爲查詢
RMaster.dbo.fnFormatDate (GETUTCDATE(), 'Company_Enroll_YYYY-MM-DD.csv')
我想用它作爲我可以打電話查詢的一部分從我的C#代碼,所以查詢應該是這樣的:
選擇ThisField,... 從MYTABLE
這是可行的?
謝謝。
我有一個表,在該領域中的一個部分,我存儲的字符串是這樣的:使用字段的內容作爲查詢
RMaster.dbo.fnFormatDate (GETUTCDATE(), 'Company_Enroll_YYYY-MM-DD.csv')
我想用它作爲我可以打電話查詢的一部分從我的C#代碼,所以查詢應該是這樣的:
選擇ThisField,... 從MYTABLE
這是可行的?
謝謝。
是的,只是通過嵌套生成一個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的調用可能會比查詢的其餘部分更多地殺死你。
謝謝你Aaron ......但我不確定INSERT。您只插入一條記錄,但每條記錄的公式不同......我猜我需要的是不可能的,不是嗎?或者,也許我誤解你的代碼? –
我認爲你需要更好地描述你的問題。 –
好的,我有一個參考表。其中一個字段包含用於生成各種文件名的格式化信息。你看到了這個數據的一個例子,但它只是我需要的模式之一。從我的C#代碼中,我需要調用一個查詢,該查詢將與該引用(查找)表一起加入另一個表,並返回根據上面描述的字段中存儲的格式化信息格式化的文件名。 –
你能提供更多的信息嗎?這個公式是否只存儲在一行上,並且你想查詢這個表,包括這個行公式的結果,以及分別存儲在其他行上的相似公式的結果?如果您需要一次執行多行操作,您需要更好地解釋這一點。例如。顯示多個配方!顯示多行!顯示多個列!展現您期望的最終結果!如果您只向我們展示一行,我們無法猜測您需要多行。 –