2016-11-07 5 views
-1

テーブルの列を別のテーブルのテーブルの列から更新しようとしていますが、次のコードを使用しています。データベース内部結合の更新

アイデア?このように、埋め込みSQLを使用してみてください

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ','.

+7

コードにコンマはありません。したがって、これにより特にエラーメッセージが非常に起こりにくくなります。 –

+0

あなたのステートメントの上下をチェックしてください....あなたがコメントアウトしたコードからカンマが潜んでいるか、完全に削除していない可能性があります。 – scsimon

+0

'update 'の前に' select'や 'update 'の後ろに' select'のようないくつかのナンセンスステートメントを入れてみると、問題がどこか別のものかどうかわかるはずです。 *管理スタジオ*で実行している場合は、新しいクエリを開き、そこでupdateステートメントを実行します。 – TheVillageIdiot

答えて

-1

UPDATE URLRecord 

SET URLRecord.Slug = aaNewURLSlugss.NewSlugName URLRecord INNER FROM URLRecord.Slug = aaNewURLSlugss.OldSlugName

エラー時にaaNewURLSlugsを登録しよう:

UPDATE URLRecord 
    SET Slug = (
    SELECT NewSlugName 
    FROM aaNewURLSlugs 
    WHERE URLRecord.Slug = aaNewURLSlugs.OldSlugName) 
WHERE Slug IN (SELECT OldSlugName FROM aaNewURLSlugs) 
+0

これは 'URLRecord'のすべての単一の行を同じ値に更新します。 – Eric

+0

私はそうは思わない。 – quantummind

+0

どちらか、そうではありません。あなた自身で@quantummindをテストし、将来の投稿にそれらの学習を使用することをお勧めします。 –

-1

エイリアスを使用してみてください

UPDATE A 
SET A.Slug = B.NewSlugName 
FROM URLRecord AS A 
INNER JOIN aaNewURLSlugs B 
ON A.Slug = B.OldSlugName 
+1

upvotesが得られるのは驚くべきことだ。 –

+0

エイリアスが何かを変更するのはなぜですか? – Ryan

0

SQL Serverでは修飾列名がSETではありません。これは機能しますか?

UPDATE r 
    SET Slug = n.NewSlugName 
FROM URLRecord r inner join 
    aaNewURLSlugs n 
    ON r.Slug = n.OldSlugName; 

エラーメッセージは、あなたが得ているものとは異なります。これは追加のエラーになります。

+0

@ MichaelJ.Gray。 。 。 "SELECT"はタイプミスで、私はコメントでOPの問題に取り組んだ。 –

+0

@ MichaelJ.Gray。 。 。あなたのコメントは元の回答のタイプミスに関するものです。「SELECT」という単語があったはずで、今は「SET」です。 –

0

ここでは、一時テーブルを使用する実用的なソリューションです。それは理想的ではないかもしれませんし、いくつかのdrop文を含んでいますので、これを実動マシンで実行しないでください。

-- Build our test tables 
CREATE TABLE [URLRecord] 
(
    [Id] INTEGER IDENTITY PRIMARY KEY, 
    [Slug] CHARACTER VARYING(255) NOT NULL 
) 

GO 

CREATE TABLE [NewSlugs] 
(
    [Id] INTEGER IDENTITY PRIMARY KEY, 
    [NewSlugName] CHARACTER VARYING(255) NULL, 
    [OldSlugName] CHARACTER VARYING(255) NULL 
) 

GO 

-- Insert test data 
INSERT INTO [URLRecord] VALUES ('Original Name'); 
INSERT INTO [NewSlugs] VALUES ('New Name', 'Original Name'); 

-- Populate work table with the records we want to modify 
SELECT [URLRecord].[Id], [NewSlugs].[NewSlugName] INTO #SlugWork 
FROM [URLRecord] 
INNER JOIN [NewSlugs] ON [URLRecord].[Slug] = [NewSlugs].[OldSlugName] 

-- We're just echoing here 
SELECT * FROM #SlugWork 

-- Pull everything from our temporary table and update modified records 
UPDATE [URLRecord] 
SET [URLRecord].[Slug] = [T].[NewSlugName] 
FROM #SlugWork AS [T] 
WHERE [T].[Id] = [URLRecord].[Id] 

-- Proving it's updated 
SELECT * FROM [URLRecord] 

-- Drop our example stuff, for rerunnability 
DROP TABLE #SlugWork 
DROP TABLE [NewSlugs] 
DROP TABLE [URLRecord] 
関連する問題