Вы должны использовать:
a = (short)(a + b);
Что касается разницы между поведением назначения и присваивания, я полагаю, что это имеет какое-то отношение к этому (из msdn)
x+=y
is equivalent to
x = x + y
except that x is only evaluated once. The meaning of the + operator is
dependent on the types of x and y (addition for numeric operands,
concatenation for string operands, and so forth).
Однако, это немного расплывчато, поэтому mabye, кто-то с более глубоким пониманием, может комментировать.
Спасибо за все комментарии. Некоторые из вас помогли мне найти ответ. Вот что я обнаружил:
Это была проблема разрешения NTFS, а не проблема SQL. Кроме того, это похоже на ошибку (и это повторяемо).
Проблема: учетная запись, которую я использовал, имела полный контроль разрешений NTFS для файлов mdf и ldf. Однако у него были эти разрешения через членство в группе (разрешения были у группы локальных администраторов, а моя учетная запись является членом локальных администраторов). (Я проверил разрешения)
Если я попытаюсь выполнить присоединение, подключиться к SQL Server от имени меня (где я нахожусь в группе администраторов), это не сработает с проблемой NTFS.
Однако, если я предоставлю те же права доступа к файлам, что и локальная группа администраторов, непосредственно моей учетной записи домена, то я могу без проблем подключиться.
(о, и да, я проверил локальные группы на этой машине и убедился, что моя учетная запись домена действительно является членом группы локальных администраторов).
Таким образом, похоже, что ошибка возникает из-за того, что некоторый код (либо в SQL Server, либо в Management Studio) проверяет разрешения, которые имеет учетная запись пользователя, но не доходит до проверки разрешений группы, которые пользователь аккаунт наследуется.
Для меня это звучит странно, но я могу воспроизводить это снова и снова, поэтому я пришел к выводу, что это ответ.
Обновление: Я сообщил об этом как об ошибке: https://connect.microsoft.com/SQLServer/feedback/details/539703/access-denied-attaching-a-database-when-permissions- are-inherited
Когда вы входите в систему как sa
(или любая учетная запись Sql Server), вы работаете как учетная запись службы SQL Server, когда вы входите в систему как вы, у вас есть разрешения вашей учетной записи. По какой-то причине у вас нет соответствующего доступа к файлам, но есть учетная запись службы.
Это похоже на разрешения NTFS. Обычно это означает, что ваша учетная запись службы SQL Server имеет доступ к файлу только для чтения (обратите внимание, что SQL Server использует одну и ту же учетную запись службы для доступа к файлам базы данных независимо от того, как вы вошли в систему). Вы уверены, что не изменили разрешения папки между входом в систему под своим именем и входом под именем sa? Если вы отсоедините папку и попробуете снова, сохранится ли та же проблема?
. Пользователь sa
использует учетные записи NTFS SQLServerMSSQLUser $ <имя_компьютера> $ <имя_экземпляра>
и SQLServerSQLAgentUser $ <имя_компьютера> $ <имя_экземпляра>
файлы. Вы можете попробовать добавить разрешения для одного или обоих этих пользователей.
Не знаю, решит ли ваша проблема, поскольку вы говорите, что у вас нет проблем с пользователем sa
, но я надеюсь, что это поможет.
Я читал эту страницу , и там есть интересное предложение:
Внимание: будьте очень избирательны при добавлении пользователей в эти роли. Например, sysadmin сопоставляется с dbo в каждой базе данных и является эквивалентом входа в систему с использованием учетной записи sa.
Конечно, у них также есть следующее:
Разрешения, которые предоставляются пользователям и ролям и зависят от базы данных. Все разрешения являются совокупными, за исключением ОТКАЗ. Отказ в разрешении на уровне пользователя или на уровне роли отменяет такое же разрешение , предоставленное через членство в другой роли , за исключением {{1} }} фиксированная роль сервера sysadmin.(Системный администратор сохраняет все разрешения, даже если роль, членом которой он является, имеет разрешение ОТКАЗАТЬ.)
Итак, если вы являетесь администратором домена и в Группа «sysadmin» SQL, мир должен быть вашим рачком.
Конечно, согласно Microsoft, вам следует быстро взглянуть на эти две страницы:
Ссылка на предварительные требования к базе данных
Ссылка на установку баз данных
Вы непослушны и пытаетесь прикрепить их вручную :) Если серьезно, есть ли у вас все предпосылки для базы данных AdventureWorks2008?
Я подозреваю, что это всего лишь еще один странный случай Microsoft, но я могу ошибаться.