2012-12-05 193 views
1

我試圖通過sql代碼或c#代碼創建一個動態的sql語句。例如,我想根據包含表名的字符串生成結果集。目前,我正在通過C#代碼進行此操作。sql創建字符串變量列名

我現在的問題是我想產生類似以下

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')的字符串?

+0

是否要選擇variable_table中的所有列或只選擇特定的一組列? – GayanSanjeewa

+0

我想所有的列,因爲如果我想限制列,我可以創建一個視圖,對吧? – Rod

回答

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') 

OUTPUT: 列1 +列2 + ...... +列

您可能必須根據需要調整VARCHAR極限,驗證。

2

爲什麼不能簡單:

 select * from variable_table_name 
     WHERE column1+column2+columnX like '%criteria%' 
相關問題