标签: select-insert

使用 OUTPUT 子句从 SELECT INSERT 语句检索原始和新的身份映射

我有一个包含两列的表:

CREATE TABLE MyTable(
  Id int IDENTITY(1,1) NOT NULL,
  Name nvarchar(100) NOT NULL);
Run Code Online (Sandbox Code Playgroud)

我想使用 SELECT INSERT 语句复制数据:

INSERT INTO MyTable (Name)
SELECT Name FROM MyTable
Run Code Online (Sandbox Code Playgroud)

这是棘手的部分 - 我想检索原始身份和新身份之间的映射表:

DECLARE @idsMap TABLE (OriginalId int, NewId int)
Run Code Online (Sandbox Code Playgroud)

我知道我应该使用OUTPUT 子句,但由于某种原因它不起作用:

INSERT INTO MyTable (Name)
OUTPUT t.Id, INSERTED.Id INTO @idsMap (OriginalId, NewId)
SELECT Name FROM MyTable t
-- Returns error The multi-part identifier "t.Id" could not be bound.
Run Code Online (Sandbox Code Playgroud)

相关问题:
SQL插入使用select可以返回多个身份吗?
可以使用表参数插入,并检索标识值吗?

sql-server output-clause select-insert

6
推荐指数
1
解决办法
1764
查看次数

MySQL JSON 编码字符串在 INSERT..SELECT 后损坏

我将图像 URL 数组编码为 json 字符串并将它们存储在数据库中。(utf8_general_ci)。

当我将数据插入表并检索它时, json_decode() 能够对其进行解码。

但是,当我将数据从一个表复制到另一个表(INSERT INTO ... SELECT 语句)时,从数据库检索后的数据无法再解码。

相反,我得到损坏的 json ENCoded 字符串。即使空数组也[]无法正确解码。

它从http://pl.tinypic.com/r/fwoiol/8转换 为http://pl.tinypic.com/r/bgea05/8

(必须制作图像,因为这些方块无法复制为文本)。

编辑,经过更多检查后,我尝试从数据库中 bin2hex() 两个字符串。

两者似乎完全一样。

然而,一种可以解码,另一种则不能。这

5b22687474703a5c2f5c2f7777772e
changes into
0022687474703a5c2f5c2f7777772e
Run Code Online (Sandbox Code Playgroud)

因此,json_decode仅将字符串中的5b更改为00。

就像它在某处丢失编码一样?

编辑2

static public function jsonDecodeFieldsArray($entries, $fields = array('features','images')){
    foreach($entries as $key => $entry){
        $entries[$key] = self::jsonDecodeFields($entry, $fields);
    }
    return $entries;
}
static public function jsonDecodeFields($entry, $fields = array('features','images')){
    foreach($fields as $field){
        if(isset($entry[$field])){
            $entry[$field] = json_decode((string) $entry[$field], true);
        }
    }
    return $entry;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用上面的代码来解码 $fields 指定的数组的键。然而,它不仅解码错误。但也会影响 …

php mysql json select-insert

5
推荐指数
1
解决办法
753
查看次数

First_or_create 尚未错误:重复的键值违反了唯一约束

我有以下代码:

rating = user.recipe_ratings.where(:recipe_id => recipe.id).where(:delivery_id => delivery.id).first_or_create
Run Code Online (Sandbox Code Playgroud)

然而不知何故,我们偶尔会遇到PG::Error: ERROR: duplicate key value violates unique constraint错误。我想不出任何应该发生的原因,因为重点first_or_create是防止这些情况发生。

这只是一个疯狂的竞争条件吗?我怎样才能在没有一系列令人发狂的begin...rescue块的情况下解决这个问题?

postgresql activerecord race-condition select-insert ruby-on-rails-3

3
推荐指数
1
解决办法
2807
查看次数