1

我正在尝试通过 sql 代码或 c# 代码创建动态 sql 语句。例如,我想根据包含表名的字符串生成结果集。目前,我正在通过 c# 代码执行此操作。

我当前的问题是我想生成类似于以下内容的搜索

select * from customers
where ContactName+City like '%Berlin%'

所以我想给一个表名作为字符串参数我需要以某种方式生成一个字符串变量'ContactName+City+etc'来构建搜索的一部分

我也对任何其他想法持开放态度。

var sql = string.Format(@"
select * from {0}
where {1} like '%criteria%'"
, variable_table
, "column1+column2+columnX"); //need function here to produce this string based on variable table?

基本上,我将如何创建一个基于 variable_table 将可变数量的列连接在一起()的字符串'ContactName+City+etc'

4

2 回答 2

2

为什么不简单地这样做:

      select * from variable_table_name
      WHERE column1+column2+columnX like '%criteria%'
于 2012-12-05T03:08:31.533 回答
1

您也可以纯粹在 SQL 中执行此操作。但是由于您已经在 C# 中完成了此操作,并且您只需要根据表名获取列列表,请尝试此操作。

如下创建一个 SQL udf。

CREATE FUNCTION funcReturnAllColumns
(
    @tableName VARCHAR(50)
)
RETURNS VARCHAR(500)
BEGIN

DECLARE @ID INT
DECLARE @ALLColumns VARCHAR(500)

SET @ALLColumns = ''

SELECT @ID = id
FROM sys.sysobjects
WHERE name = @tableName


SELECT @ALLColumns = @ALLColumns + '+' + name 
FROM sys.syscolumns
WHERE id = @ID

RETURN SUBSTRING(@ALLColumns,2,LEN(@ALLColumns))

END


SELECT dbo.funcReturnAllColumns('table_name')

输出:列 1 + 列 2 + ..... + 列 N

您可能必须根据需要调整 varchar 限制和验证。

于 2012-12-05T22:53:56.957 回答