English 中文(简体)
SQL 结果用通配符字符字符字符串
原标题:SQL results to string with wildcard

假设你有一张像这样的桌子:

ID     FNAME      LNAME
1      Bob        Smith
2      Sally      Jones

简单的 SELECT * 从 [表] 返回所有行。 但如果你想从结果中建立一个单字符串, 而列名称未知, 将会如何? 换句话说, 这将不起作用 :

SELECT ID +  ,  + FNAME +  ,  + LNAME FROM [Table]

因为您不知道列名。 此外, CoALESC 不接受通配符, 因而无法工作。 理想的情况是, 您想要执行类似的东西 :

SELECT dbo.FunctionThatSplitsResultsToString(*) FROM [Table]

并且使它再返,

1,Bob,Smith
2,Sally,Jones

有可能吗?

最佳回答

这是对@Igor 给出的答案的更正版本。 除了在数值之间配置逗号字符外, 它还将 NULL 值转换为空字符串( 因为将字符串转换为 NULL 导致 NULL 值 ) 。

DECLARE @sql NVARCHAR(max)= SELECT  
DECLARE @TableName NVARCHAR(max) =  Table_Name  -- <-- Set the target table name here

SELECT @sql=@sql+N ISNULL(CAST(  + name +  as NVARCHAR(max)),     )+  ,  + 
FROM sys.columns
WHERE object_id=OBJECT_ID(@TableName)

SELECT @sql=SUBSTRING(@sql,1,LEN(@sql)-5)+N  FROM   + @TableName
--SELECT @sql -- uncomment to see the query string

EXEC sp_executesql @sql
问题回答

正如第一位伊戈尔所指出的,解决方案是动态 SQL。 您需要正确构建基础 SQL 语句 。

以下代码将所有列划入 varchar (), 然后将其组合在一起。 SQL 的最终形式将删除最后的“ +” 符号, 并添加语句中的符号 :

declare @sql varchar(max);

select @sql = (select  cast( +coalesce(column_name,   ) +   as varchar(255)) + 
               from information_schema.columns
               where table_name = <whatever>
               for xml path (  )
              );

select @sql = left(@sql, len(@sql - 2)) +   from t ;

exec(@sql);

我承认自己以美国为中心,很少使用国际化。 整个事情也与nvachars () 合作。

试下试下

GO DECLARE @ColumnsList VARCHAR(MAX), @SelectStatement VARCHAR(MAX),@TargetTable VARCHAR(250) ,@FINALSQL NVARCHAR(MAX) SET @TARGETTABLE = TempData

SELECT @ColumnsList = COALESCE( @ColumnsList+ + , + , ) + Cast( + A.COLUMN_NAME + AS Varchar(250)) FROM (select Column_Name from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME= @TARGETTABLE) A SELECT @FinalSql = Select +@ColumnsList + FROM + @TARGETTABLE

EXEC SP_EXECUTESQL @FINALSQL GO





相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

难以执行 REGEXP_SUBSTR

I m 查询Oracle 10g。 我有两张表格(样本数据见下文)。 i m 试图提取一些领域

SQL Query Shortcuts

What are some cool SQL shorthands that you know of? For example, something I learned today is you can specify to group by an index: SELECT col1, col2 FROM table GROUP BY 2 This will group by col2

PHP array callback functions for cleaning output

I have an array of output from a database. I am wondering what the cleanest way to filter the values is example array Array ( [0] => Array ( [title] => title 1 ...

OracleParameter and DBNull.Value

we have a table in an Oracle Database which contains a column with the type Char(3 Byte). Now we use a parameterized sql to select some rows with a DBNull.Value and it doesn t work: OracleCommand ...

Running numbers in SQL

I have a SQL-statement like this: SELECT name FROM users WHERE deleted = 0; How can i create a result set with a running number in the first row? So the result would look like this: 1 Name_1 2 ...

How to get SQL queries for each user where env is production

I’m developing an application dedicated to generate statistical reports, I would like that user after saving their stat report they save sql queries too. To do that I wrote the following module: ...

热门标签