Во-первых, я парень безопасности, а не разработчик. Если есть более простой способ сделать то, что я пытаюсь сделать, я не удивлюсь. Это мой первый раз, когда я делаю что-нибудь на C#, так что будьте осторожны.Возможно ли запустить 2 отдельных оператора INSERT в одном?
Я работаю над базой данных для отслеживания соблюдения вами контрольных проверок. База данных - это MS SQL 2008 с интерфейсом веб-приложения, который я пишу на C#. Я работаю над страницей, которая позволяет пользователю обновлять элемент управления с помощью результатов теста или изменять требования или почти все остальное. Когда информация обновляется на этой странице, я пытаюсь записать существующие данные из таблицы Controls в таблицу History перед обновлением записи в таблице Controls. Я также пытаюсь войти (в таблице History
), кто сделал обновление и когда. Здесь я столкнулся с проблемой. Я могу вложить оператор SELECT
в оператор INSERT
, чтобы вытащить данные, но я не могу понять, как добавить дату и время, когда оно было обновлено, и пользователь, который его обновил.
Это мой запрос в настоящее время, который не работает по понятным причинам. Просто у вас есть представление о том, с какими столбцами и параметрами я работаю.
INSERT INTO History (BUName, ControlFWName, ControlID, ControlDesc,
TestPlan, TestFreq, NextTest, ControlCatName,
AuditorNotes, AuditorNoteTime, TestResults, ArtifactID1,
ArtifactID2, ArtifactID3, ArtifactID4,
WhoChanged, WhenChanged)
SELECT BUName, ControlFWName, ControlID, ControlDesc,
TestPlan, TestFreq, NextTest, ControlCatName,
AuditorNotes, AuditorNoteTime, TestResults, ArtifactID1,
ArtifactID2, ArtifactID3, ArtifactID4
FROM Controls
WHERE BUName = @BUName
AND ControlFWName = @ControlFWName
AND ControlID = @ControlID
Как добавить в WhoChanged
и WhenChanged
столбцы в этой вставки заявление? Они параметризуются переменными, которые являются только DateTime.Now
и User.Identity.Name
.
Если вам нужно больше кода, то дайте мне знать.
Я подумал о добавлении столбцов в таблицу «Элементы управления», но я старался держаться подальше от него. Я читал о вычисляемых столбцах в SQL Server. Можно ли просто заставить SQL-сервер фиксировать метку времени и имя пользователя при добавлении записи? – Edward
Это, безусловно, возможно, если вы используете Trusted Authentication для подключения к данным, и все ваши материалы Kerberos настроены соответствующим образом. Часто веб-приложения запускаются в контексте учетной записи службы, поэтому вам не нужно предоставлять права доступа к данным для пользователей. Вам решать. В SQL существует не менее 4 различных «текущих пользовательских» функций, и я не помню, какой из них правильный. – Bill