Обновление таблицы из хранимой процедуры

голоса
2

Я пытаюсь узнать базу данных по себе; все ваши комментарии приветствуются. У меня есть следующая таблица.

CREATE TABLE AccountTable
(
    AccountId INT IDENTITY(100,1) PRIMARY KEY,
    FirstName NVARCHAR(50) NULL,
    LastName NVARCHAR(50) NULL,
    Street NVARCHAR(50) NULL,
    StateId INT REFERENCES STATETABLE(StateId) NOT NULL
)

Я хотел бы написать хранимую процедуру, которая обновляет строку. Я полагаю, что хранимая процедура будет выглядеть следующим образом:

CREATE PROCEDURE AccountTable_Update
       @Id          INT,
       @FirstName  NVARCHAR(20),      
  @LastName   NVARCHAR(20), 
  @StreetName NVARCHAR(20),
  @StateId  INT
  AS
BEGIN
UPDATE AccountTable 
  Set FirstName = @FirstName
  Set LastName = @LastName
  Set Street = @StreetName
  Set StateId = @StateId 
  WHERE AccountId = @Id
END

абонент предоставляет новую информацию, которую он хочет строку иметь. Я знаю, что некоторые поля не совсем точны или точны; Я делаю это в основном для обучения.

  1. Я имею ошибку синтаксиса с помощью команд SET в UPDATE части, и я не знаю, как это исправить.
  2. Есть хранимая процедура, я пишу процедуру, вы бы написать в реальной жизни? Является ли это антипаттерны?
  3. Существуют ли какие-либо серьезные ошибки, которые я сделал, что просто заставляет вас передергивает, когда вы читаете выше TSQL?
Задан 29/07/2009 в 01:15
пользователем
На других языках...                            


2 ответов

голоса
4

# 1: Вам нужно запятые между столбцами:

UPDATE AccountTable SET
    FirstName = @FirstName,
    LastName = @LastName,
    Street = @StreetName,
    StateId = @StateId
WHERE 
    AccountId = @Id

SETвызывается только один раз, в самом начале UPDATEсписка. Каждый столбец после этого находится в запятой. Проверьте документацию MSDN на него.

# 2: Это не антипаттерны, сами по себе. Особенно с учетом ввода данных пользователя. Вы хотите parametized запросы, чтобы избежать инъекции SQL . Если вы должны были построить запрос в виде строки выключения пользовательского ввода, вы были бы очень, очень восприимчивы к инъекции SQL. Однако, используя параметры, обойти эту уязвимость. Большинство РСУБДА удостоверится дезинфицировать параметры , передаваемые его запросы автоматически. Есть много противников хранимых процедур, но вы используете его как способ бить SQL инъекцию, так что это не антипаттерны.

# 3: Единственная серьезная ошибка , я видел , был SETвместо запятых. Кроме того , как ckittel отметил, ваше несоответствие в длине ваших nvarcharколонок.

Ответил 29/07/2009 в 01:16
источник пользователем

голоса
5

Существуют ли какие-либо серьезные ошибки, которые я сделал, что просто заставляет вас передергивает, когда вы читаете выше TSQL?

Не совсем строковые полей «могила», но я заметил, что ваша таблицы устанавливается как тип данные NVARCHAR (50) еще сохраненные параметры процедур являются NVARCHAR (20). Это может быть причиной для беспокойства. Обычно ваши сохраненные параметры процедуры будут соответствовать типу данным и точность соответствующего поля в.

Ответил 29/07/2009 в 01:26
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more