私はDBAではなく開発者です(表示されているようですが、恐れています)。自宅のコンピューター(John-PC
という名前)でSQL Server 2014 Expressを使用してレポートビルダー3.0を実行しようとしていますが、レポートを実行できません。
user = John-PC
とlogin = John-PC\John
のユーザー/ログインコンボを誤って作成しました。私がエントリを削除しようとすると:
Drop Login John-PC\John
エラーが発生します:
「-」付近の構文が正しくありません。
問題は私のコンピュータ名のハイフンにあると思います。
sys.server_principals
から削除しようとしましたが、特別な変更を行うことができないというエラーを受け取りました)。John_PC
に変更できますか、それとも、想像もできない他の多くの問題が発生しますか?名前に特殊文字がある場合は、[]で囲んで、SQLに識別子であることを知らせます。これは、特殊文字を管理する方法でもあります。
だからあなたの場合
Drop Login [John-PC\John]
ログインが1つしかない場合は、 手動で引用 _[
_ _]
_を使用して機能します。それらが多数ある場合は、以下のような動的SQLを構築して、 QUOTENAME()
tsqlを使用して_drop login [login_to_drop]
_から_sys.server_principals
_をプログラム的に取得する必要があります
_DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql+= N'DROP LOGIN ' + QUOTENAME(name) + ';'
FROM sys.server_principals
WHERE name <> N'sa' -- do not drop SA
AND name NOT LIKE N'##%' -- special logins
AND name NOT LIKE N'NT [AS]%' -- special logins NT related
AND [type] IN ('S', 'U', 'G','R') -- S = SQL login | U = Windows login | G = Windows group | R = Server role
AND principal_id > 256
--AND name in () -- Filter to drop specific logins
AND name <> SUSER_SNAME(); -- This will avoid yourself for being dropped !
PRINT @sql;
-- once you verify that below logins will be dropped,
-- uncomment below line
-- EXEC master.sys.sp_executesql @sql;
_
学んだ教訓、特殊文字は使用しないでください..さもなければ、いくつかの苦痛を伴うそれらに対処する準備をしてください