几年前,我编写了一堆函数和过程来帮助我为 SQL Server 和使用动态 SQL 的应用程序开发自动代码生成例程。我认为以下是对您的情况最有帮助的:
Create FUNCTION [dbo].[ColumnString2]
(
@TableName As SYSNAME, --table or view whose column names you want
@Template As NVarchar(MAX), --replaces '{c}' with the name for every column,
@Between As NVarchar(MAX) --puts this string between every column string
)
RETURNS NVarchar(MAX) AS
BEGIN
DECLARE @str As NVarchar(MAX);
SELECT TOP 999
@str = COALESCE(
@str + @Between + REPLACE(@Template,N'{c}',COLUMN_NAME),
REPLACE(@Template,N'{c}',COLUMN_NAME)
)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA= COALESCE(PARSENAME(@TableName, 2), N'dbo')
And TABLE_NAME = PARSENAME(@TableName, 1)
ORDER BY ORDINAL_POSITION
RETURN @str;
END
这允许您设置表的所有列名的格式或以您想要的任何方式查看。只需向其传递一个表名称和一个模板字符串'{c}'您希望为每列插入列名称的任何地方。它将对中的每一列执行此操作@TableName
,并添加@Between
串在它们之间。
下面是如何垂直格式化表的所有列名的示例,并以适合包含在 SELECT 查询中的方式使用前缀重命名它们:
SELECT dbo.[ColumnString2](N'yourTable', N'
{c} As prefix_{c}', N',')
此函数旨在与动态 SQL 一起使用,但您也可以通过在 Management Studio 中执行它并将输出设置为文本(而不是网格)来使用它。然后将输出剪切并粘贴到所需的查询、视图或代码文本中。 (请务必更改文本结果的 SSMS 查询选项以提高“显示的最大字符数”从 256 到最大值 (8000)。如果仍然被切断,那么您可以将此过程更改为一个函数,将每一列输出为单独的行,而不是作为一个大字符串。)