如何使用sql server查询使查询替换列(如果存在)



我有一个查询如下:

alter table [toolDB].[dbo].[esn_sho] add esn_umts_sho_relation_key as Convert(nvarchar(50),[utrancell])+'_'+Convert(nvarchar(50),[utranrelation])

所以我只需要替换esn_umts_sho_relation_key列(如果存在的话(。。。

当我得到这个错误:

[Microsoft][SQL Server Native Client 11.0][SQL Server]Column names in each table must be unique. Column name 'esn_umts_sho_relation_key' in table 'toolDB.dbo.esn_sho' is specified more than once

我厌倦了使用以下代码,但它不起作用:

IF NOT EXISTS (alter table [toolDB].[dbo].[esn_sho] add esn_umts_sho_relation_key as Convert(nvarchar(50),[utrancell])+'_'+Convert(nvarchar(50),[utranrelation]))

它给了我这个错误:

Incorrect syntax near the keyword 'alter'.
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ')'

所以我想在这个查询中添加If Exist,任何人都知道如何解决这个问题。。。

我的列已经存在于表中,但如果存在,我想将其替换为escape。。。

IF COL_LENGTH('TableName', 'ColumnName') IS NOT NULL
BEGIN
-- Column Exists
-- here you can put your cond...
END

IF COL_LENGTH('[toolDB].[dbo].[esn_sho]', 'esn_umts_sho_relation_key') IS NOT NULL
BEGIN
-- Column Exists
alter table [toolDB].[dbo].[esn_sho] add esn_umts_sho_relation_key as Convert(nvarchar(50),[utrancell])+'_'+Convert(nvarchar(50),[utranrelation])---Put your condition in proper way...
END
IF EXISTS(SELECT * FROM DatabaseName  where ColumnName = @YourParameter)
BEGIN
You Can Write Alter Query Here
END
ELSE
BEGIN
You Can Set Here AN Else Condition/Optional
END

要解决这个特殊问题,可以使用系统表。试试这个

SELECT * 
FROM sys.all_objects obj
JOIN sys.all_columns col ON obj.object_id = col.object_id
WHERE 
obj.Name = @YourTableName
AND col.Name = @YourColumnName

这将为您提供表中的列(如果存在(。你可以用它来决定如果它存在/不存在你会做什么。

最新更新