テーブルの列を別のテーブルのテーブルの列から更新しようとしていますが、次のコードを使用しています。データベース内部結合の更新
アイデア?このように、埋め込みSQLを使用してみてください
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ','.
テーブルの列を別のテーブルのテーブルの列から更新しようとしていますが、次のコードを使用しています。データベース内部結合の更新
アイデア?このように、埋め込みSQLを使用してみてください
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ','.
:
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)
これは 'URLRecord'のすべての単一の行を同じ値に更新します。 – Eric
私はそうは思わない。 – quantummind
どちらか、そうではありません。あなた自身で@quantummindをテストし、将来の投稿にそれらの学習を使用することをお勧めします。 –
エイリアスを使用してみてください
UPDATE A
SET A.Slug = B.NewSlugName
FROM URLRecord AS A
INNER JOIN aaNewURLSlugs B
ON A.Slug = B.OldSlugName
upvotesが得られるのは驚くべきことだ。 –
エイリアスが何かを変更するのはなぜですか? – Ryan
SQL Serverでは修飾列名がSET
ではありません。これは機能しますか?
UPDATE r
SET Slug = n.NewSlugName
FROM URLRecord r inner join
aaNewURLSlugs n
ON r.Slug = n.OldSlugName;
エラーメッセージは、あなたが得ているものとは異なります。これは追加のエラーになります。
@ MichaelJ.Gray。 。 。 "SELECT"はタイプミスで、私はコメントでOPの問題に取り組んだ。 –
@ MichaelJ.Gray。 。 。あなたのコメントは元の回答のタイプミスに関するものです。「SELECT」という単語があったはずで、今は「SET」です。 –
ここでは、一時テーブルを使用する実用的なソリューションです。それは理想的ではないかもしれませんし、いくつかの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]
コードにコンマはありません。したがって、これにより特にエラーメッセージが非常に起こりにくくなります。 –
あなたのステートメントの上下をチェックしてください....あなたがコメントアウトしたコードからカンマが潜んでいるか、完全に削除していない可能性があります。 – scsimon
'update 'の前に' select'や 'update 'の後ろに' select'のようないくつかのナンセンスステートメントを入れてみると、問題がどこか別のものかどうかわかるはずです。 *管理スタジオ*で実行している場合は、新しいクエリを開き、そこでupdateステートメントを実行します。 – TheVillageIdiot