0

次のことを考慮してください。

USE [$(db_name)]
GO

IF SCHEMA_ID('$(schema_name)') IS NULL
    -- Must use dynamic SQL because 'CREATE SCHEMA' must be the first
    -- statement in a query batch.
    EXECUTE('CREATE SCHEMA [$(schema_name)]')

-- User already exists at this point.
GRANT SELECT, EXECUTE ON SCHEMA::[$(schema_name)] TO [$(user_name)]

を介して実行するsqlcmd.exeと、エラーは報告されず、スキーマが作成されますが、アクセス許可は付与されません。次に、SSMSの最後の行を実行すると(sqlcmd変数を代入して)、期待どおりに機能します。

SQL Serverが私が求めることを実行しない理由はありますか?

編集:言うべきだった、それはSQL Server 2008(10.50.1617)です。

編集2:主よ、デプロイフレームワークがユーザーを削除して再作成していたことがわかりました。すべての提案をありがとう。

4

1 に答える 1

0

問題のデータベース ユーザーが削除され、その後のデプロイ プロセスで再作成されたことが判明しました。これにより、 からエラーが発生しなかっsqlcmd.exeた理由、 の前に追加した存在チェックがエラーをGRANT出さなかった理由、およびGRANTを後で手動で実行しても期待どおりに機能した理由が説明されています。

于 2012-04-20T15:41:47.280 に答える