插入时SQL Server选择列

时间:2015-03-28 17:44:04

标签: sql sql-server

这个问题是插入语句的一部分,我试图从另一个可以插入列的值中选择一个值。

例如,在我的表OnlineServers中,我有列:

ID, ServerID, OnlineSince

在我的第二个表ImportServers中,我有数据列(NewYork和Paris之后的行实际上是空的):

ImportServerName
NewYork

London
Paris

Tokyo

此问题与SQL Server有关。

在我的第三个表中,这是一个名为ServerLookup的查找表,我将这些列包含数据:

ID, ServerName
0   Not specified
1   NewYork
2   London
3   Tokyo
4   Munich
5   Salzburg

问题:我想要一个sql语句,可以选择ID' 0'从ServerLookup表中,如果ImportServerName列的值为空。

到目前为止我所拥有的是:

insert into OnlineServers (ServerID, OnlineSince)
select
(
    select ID
    from ServerLookup
    where ServerLookup.ServerName = ImportServers.ServerName
       or ServerLookup.ServerName = ''
),
GETDATE()
from ImportServers

我面临的问题是如果服务器名称匹配,它还会返回一个空服务器名称的额外行。

如何解决此问题。

由于

PS:如果代码中有任何拼写错误,请原谅我

3 个答案:

答案 0 :(得分:0)

也许是这样的:

SELECT FIRST(column_name) FROM table_name; 

限制返回第一场比赛,也不要在选择括号内吗?

    select FIRST(ID)
        from ServerLookup
        where ServerLookup.ServerName = ImportServers.ServerName
           or ServerLookup.ServerName = ''
from ImportServers)

答案 1 :(得分:0)

如果我理解你的问题,请尝试这样的事情

insert into OnlineServers (ServerID, OnlineSince)
select TOP(1) ID ,GETDATE() 
   from ServerLookup
   inner join ImportServers
    on ServerLookup.ServerName = ImportServers.ServerName
     Where ServerLookup.ServerName = ''

答案 2 :(得分:0)

INSERT INTO OnlineServers
SELECT CASE ImportServerName 
    WHEN '' THEN 0
    ELSE ID
END AS ServerID, GetDate()
FROM ImportedServers s 
LEFT JOIN ServerLookup l on s.ImportedServerName = l.ServerName; 

这应该这样做。您LEFT JOIN所以您从ImportedServers获取每条记录并使用CASE获取0,其中ImportServerName为空。