コンピューター名にハイフンが含まれていてT-SQLエラーが発生する


13

私は開発者であり、DBAではありません(これは、私が恐れている)自宅のコンピューター(という名前のJohn-PC)でSQL Server 2014 Expressを使用してレポートビルダー3.0を実行しようとしていますが、レポートを実行できません。

私は偶然のユーザー/ログインコンボを作成user = John-PCしてlogin = John-PC\John。でエントリを削除しようとすると:

Drop Login John-PC\John

エラーが発生します:

「-」付近の構文が正しくありません。

問題は私のコンピューター名のハイフンだと思います。

  1. 構文エラーを回避する方法はありますか?
  2. ユーザーを変更またはドロップする別の方法はありますか(ドロップしようとしましsys.server_principalsたが、アドホックな変更ができないというエラーを受け取りました)。
  3. どういうわけか、レポートビルダーに新しいユーザー/ログイン名を付けることはできますか?
  4. 上記のいずれでもない場合、コンピューターの名前を変更するJohn_PCことはできますか?

回答:


21

名前に特殊文字が含まれる場合は、[]を囲んでSQLにそれが識別子であることを知らせます。これは、特殊文字の管理方法でもあります。

あなたの場合

Drop Login [John-PC\John]

12

ログインが1つしかない場合は、手動でそれをクォートしてください[ ]。それらの多くを持っている場合は、以下のような動的SQLを構築して、tsql drop login [login_to_drop]sys.server_principals使用してプログラム的に取得する必要がありQUOTENAME()ます

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;

教訓は、特殊文字を使用しないでください..そうでなければ、いくつかの痛みに対処する準備をしてください:-)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.