2

システムの重大な問題を解決するために、T-SQL でスクリプトを作成しようとしています。残念ながら、私はこれまでにこれをやったことがないので、未知の海に入っています.

私は実際に、この SQL を生成するための PHP スクリプトを作成しています。ユーザーが存在する場合は、作成します。ただし、どちらの場合も、ユーザーをグループに追加してください。

DECLARE @userId AS int

/* --------------- 123l123123fvsdf - Name --------------- */
    BEGIN
        IF EXISTS(SELECT id FROM [CMT_UAT].[dbo].[user] WHERE username = '123l123123fvsdf')
                INSERT INTO [CMT_UAT].[dbo].[user](username, password, email, firstname, lastname, created) VALUES('123l123123fvsdf', 'PASSWORD', 'aa00043@user.com', 'firstName', 'lastName', GETDATE())
                GO
                SET @userId = @@IDENTITY
        ELSE
                SET @userId = SELECT id FROM [CMT_UAT].[dbo].[user] WHERE username = 'AA00043'
    END
    INSERT INTO [CMT_UAT].[dbo].[user_group](user_id, group_id) VALUES(@userId, '7')

次のエラーが表示されます。

メッセージ 102、レベル 15、状態 1、行 7
')' 付近の構文が正しくありません。
メッセージ 137、レベル 15、状態 1、行 1
スカラー変数「@userId」を宣言する必要があります。
メッセージ 156、レベル 15、状態 1、行 3
キーワード「SELECT」付近の構文が正しくありません。
メッセージ 156、レベル 15、状態 1、行 5
キーワード「INSERT」付近の構文が正しくありません。
メッセージ 137、レベル 15、状態 2、行 5
スカラー変数「@userId」を宣言する必要があります。

スカラー値をグーグルで調べましたが、クエリが複数の行を返すときに発生する可能性がありますが、そうでないことを確認しました。

4

2 に答える 2

5

スクリプトから「GO」を削除します。「GO」は、実行バッチを終了して新しいバッチを開始するように接続マネージャーに指示するプロバイダー命令です。したがって、実行コンテキストがリセットされ、@userid変数宣言が消去されます。

于 2012-12-05T19:33:48.960 に答える
3

if ステートメントを修正する必要があります。試す:

DECLARE @userId AS int

IF EXISTS(SELECT id FROM [CMT_UAT].[dbo].[user] WHERE username = '123l123123fvsdf')
BEGIN
    INSERT INTO [CMT_UAT].[dbo].[user](username, password, email, firstname, lastname, created) VALUES('123l123123fvsdf', 'PASSWORD', 'aa00043@user.com', 'firstName', 'lastName', GETDATE())
    SET @userId = @@IDENTITY
END
ELSE
   SET @userId = SELECT id FROM [CMT_UAT].[dbo].[user] WHERE username = 'AA00043'

INSERT INTO [CMT_UAT].[dbo].[user_group](user_id, group_id) VALUES(@userId, '7')

if ブロックの最初の部分に multipl ステートメントがありますが、それを配置するのを忘れBEGINましEND

また、RBarryYoung が指摘したように、削除する必要がありますGO

于 2012-12-05T19:32:10.600 に答える