Sql server 使用字段内容作为查询的一部分

Sql server 使用字段内容作为查询的一部分,sql-server,tsql,Sql Server,Tsql,我有一个表,在其中一个字段中存储了如下字符串: RMaster.dbo.fnFormatDate (GETUTCDATE(), 'Company_Enroll_YYYY-MM-DD.csv') 我想将其用作查询的一部分,我可以从我的c代码中调用它,因此查询如下所示: RMaster.dbo.fnFormatDate (GETUTCDATE(), 'Company_Enroll_YYYY-MM-DD.csv') 选择此字段。。。 从mytable 这可行吗 谢谢。是的,只需通过嵌套生成SQL字

我有一个表,在其中一个字段中存储了如下字符串:

RMaster.dbo.fnFormatDate (GETUTCDATE(), 'Company_Enroll_YYYY-MM-DD.csv')
我想将其用作查询的一部分,我可以从我的c代码中调用它,因此查询如下所示:

RMaster.dbo.fnFormatDate (GETUTCDATE(), 'Company_Enroll_YYYY-MM-DD.csv')
选择此字段。。。 从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的调用可能比查询的其余部分更让您丧命。

谢谢您,亚伦。。。但我不确定插页的内容。您只插入一条记录,但每条记录的公式不同。。。我想我需要的是不可能的,不是吗?或者我误解了你的代码?我想你需要更好地描述你的问题。好的,我有一个参考表。其中一个字段包含用于生成各种文件名的格式信息。您看到了该数据的一个示例,但这只是我需要的模式之一。在我的C代码中,我需要调用一个查询,将另一个表与该引用查找表连接起来,并返回根据存储在上述字段中的格式信息格式化的文件名。您能提供更多信息吗?此公式是否仅存储在一行中,并且您希望查询此表,仅包括此行中此公式的结果,以及其他行中分别存储的每个行的类似公式的结果?如果您需要一次执行多行,您需要更好地解释这一点。例如,显示多个公式!显示多行!显示多个列!展示你期望的最终结果!如果你只给我们看一排,我们猜不出你想要多排。