【问题标题】:Why does this SELECT query work, but fails when I try to SELECT INTO?为什么这个 SELECT 查询有效,但是当我尝试 SELECT INTO 时却失败了?
【发布时间】:2014-01-17 11:02:00
【问题描述】:

我有以下选择查询,它按预期运行(其目的是从另一个表中的字符串构建单词列表):

SELECT UPPER(LTRIM(RTRIM(allWords.words)))
FROM
(
    SELECT section.Cols.value('.', 'varchar(250)') words
    FROM @xml.nodes('/c') section(Cols)
) AS allWords
WHERE 
    LTRIM(RTRIM(words)) <> ''
    AND dbo.RegExIsMatch('.*[\W\d].*',LTRIM(RTRIM(words)),1) <> 1
    AND LEN(LTRIM(RTRIM(words))) > 3
GROUP BY words

但是当我添加 INTO 声明时它失败了:

IF OBJECT_ID('usr.nameList') IS NOT NULL DROP TABLE usr.nameList;

SELECT UPPER(LTRIM(RTRIM(allWords.words)))
INTO usr.nameList
FROM
(
    SELECT section.Cols.value('.', 'varchar(250)') words
    FROM @xml.nodes('/c') section(Cols)
) AS allWords
WHERE 
    LTRIM(RTRIM(words)) <> ''
    AND dbo.RegExIsMatch('.*[\W\d].*',LTRIM(RTRIM(words)),1) <> 1
    AND LEN(LTRIM(RTRIM(words))) > 3
GROUP BY words

输出是:

对象或列名丢失或为空。对于选择进入 语句,验证每一列都有一个名称。对于其他陈述,请查看 对于空别名。不允许使用定义为 "" 或 [] 的别名。 将别名更改为有效名称。

如果SELECT 查询有效,为什么将数据插入新表这样简单的修改会失败?

【问题讨论】:

    标签: sql sql-server-2008


    【解决方案1】:

    您在错误消息中遗漏了什么?您需要为列命名:

    SELECT UPPER(LTRIM(RTRIM(allWords.words))) as words
    INTO usr.nameList
    FROM
    (
        SELECT section.Cols.value('.', 'varchar(250)') words
        FROM @xml.nodes('/c') section(Cols)
    ) AS allWords
    WHERE 
        LTRIM(RTRIM(words)) <> ''
        AND dbo.RegExIsMatch('.*[\W\d].*',LTRIM(RTRIM(words)),1) <> 1
        AND LEN(LTRIM(RTRIM(words))) > 3
    GROUP BY words;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多