如何解决如何在SQL Server的select语句中向列列表中添加临时列?
我写了以下代码,如下所示:
DECLARE @SQL nvarchar(max);
DECLARE @ColumnList nvarchar(max);
DECLARE @SampleTable nvarchar(max);
SET @SampleTable = 'dbo.CourseType' --HERE I'LL BE GIVING LIST OF TABLES
SELECT
@ColumnList = (SELECT STUFF((SELECT N',' + QOUTENAME(c.name)
FROM sys.columns c
INNER JOIN sys.objects o ON c.object_id = o.object_id
WHERE o.name = @SampleTable
AND c.name NOT IN ('ID','Number')
ORDER BY c.column_id
FOR XML PATH(''),TYPE).value('text()[1]','nvarchar(max)'),1,2,N''))
SELECT @ColumnList
从此脚本中,我将获得除列ID
,Number
之外的所有列的列表。现在,我要做的就是读取此列列表,即[Name],[Description],[SortOrder],[BusinessName],[Obsolete]
,下面列出了一些临时列:
NULL AS EntityID,NULL AS ModifiedBy,NULL AS CreatedBy
查询结果应如下所示:
Name Description SortOrder BusinessMeaningName Obsolete EntityID ModifiedBy CreatedBy
Inviern Cursos de Invierno de Pregrado 1 AcademicPeriodType.Invierno 0 NULL NULL NULL
Lectivo Cursos Lectivos de Pregrado 0 AcademicPeriodType.Lectivo 0 NULL NULL NULL
Verano Cursos de Verano de Pregrado 1 AcademicPeriodType.Verano 0 NULL NULL NULL
我知道我可以直接通过为一两个表选择带有临时列的列名来直接执行此操作。但是我必须为一大堆桌子这样做。我想不出办法。
现在,我不知道如何在select语句中添加EntityID,CreatedBy,ModifiedBy
。我试图做这样的事情。
SET @SQL = 'SELET '
+ @ColumnList
+ ' FROM ' + @SampleTable;
EXEC sp_executesql @SQL;
有人可以帮我吗?
解决方法
只需在动态语句中添加其他列即可。
--Dynamic object should be declared like this
DECLARE @SampleSchema sysname = N'dbo',@SampleTable sysname = N'CourseType';
SET @SQL = N'SELECT ' +
@ColumnList +
N',NULL AS EntityID,NULL AS ModifiedBy,NULL AS CreatedBy' +
N' FROM ' + QUOTENAME(@SampleSchema) + N'.' + QUOTENAME(@SampleTable) + N';';
EXEC sys.sp_executesql @SQL;
此外,对象的名称只能包含255个字符,因此请勿将nvarchar(MAX)
用作其数据类型。将@SampleTable
声明为sysname
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。