我运行SSIS的目的是为了进行数据仓库,基本上它会遍历我所有的数据库并将这些数据保存到表中。但是,有些表缺少[LastModified]
列,我想为不匹配的列创建列。
这是我的选择语句-
IF EXISTS(SELECT 1 FROM sys.columns
WHERE Name = N'LastModified'
AND Object_ID = Object_ID(N'dbo.Branch'))
(SELECT [ID]
,ISNULL([Name], '') AS [Name]
,ISNULL([Code], '') AS [Code]
,ISNULL([LastModified], '') AS [LastModified]
,[TimeStampField] from [dbo].[Branch])
ELSE
(SELECT [ID]
,ISNULL([Name], '') AS [Name]
,ISNULL([Code], '') AS [Code]
,getdate() AS [LastModified]
,[TimeStampField] from [dbo].[Branch])
我收到错误-无效的列名“ LastModified”。
如果我将ISNULL([LastModified], '') AS [LastModified]
更改为GetDate() AS [LastModified]
,它将起作用。但是,这将更改具有[LastModified]
列的表上的日期。
是否有更好的方法来实现这一点,也许派生列函数?
答案 0 :(得分:3)
您可以使用动态sql执行此操作:
DECLARE @sql varchar(max);
IF EXISTS(SELECT 1 FROM sys.columns
WHERE Name = N'LastModified'
AND Object_ID = Object_ID(N'dbo.Branch'))
SET @sql = 'SELECT [ID]
,ISNULL([Name], '') AS [Name]
,ISNULL([Code], '') AS [Code]
,ISNULL([LastModified], '') AS [LastModified]
,[TimeStampField] from [dbo].[Branch]';
ELSE
SET @sql = 'SELECT [ID]
,ISNULL([Name], '') AS [Name]
,ISNULL([Code], '') AS [Code]
,getdate() AS [LastModified]
,[TimeStampField] from [dbo].[Branch]';
EXEC(@sql);
使用Dynamic SQL从解析器中隐藏了以下事实:代码中可能的路径之一引用了不存在的列。