sql使用列名创建字符串变量

时间:2012-12-05 03:01:44

标签: c# sql sql-server sql-server-2008

我正在尝试通过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')?

2 个答案:

答案 0 :(得分:2)

为什么不简单:

      select * from variable_table_name
      WHERE column1+column2+columnX like '%criteria%'

答案 1 :(得分: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')

输出: Column1 + Column2 + ..... + ColumN

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