Обновите столбец таблицы в SQL Server 2005 - PullRequest
1 голос
/ 28 октября 2011

Я проверяю наличие столбца в таблице.Если он существует, я обновляю столбец во 2-й таблице на основе столбца в первой таблице.

Проблема в том, что обновление выполняется, когда оно не должно быть, и приводит к ошибке.

Я проверяю наличие столбца Requested_by в таблице Service_requests_details, затем обновляю столбец в service_requests на основе столбца requested_by в таблице Service_Requests_Details.

Дело в том, что Requested_By может не существовать в таблице Service_requests_details.

IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'Requested_By' and object_ID = object_ID(N'Service_Requests_Details'))
BEGIN
      Update SR
      Set SR.Requested_By  = SRD.Requested_By 
      FROM Service_Requests SR
      INNER JOIN Service_Requests_Details SRD ON SRD.Request_Index = SR.Service_Request_Index
END
GO

Обновление:
Спасибо всем, кто откликнулся.Спасибо @SqlAcid за ответ.

Ответы [ 2 ]

3 голосов
/ 28 октября 2011

Проблема в том, что синтаксический анализатор все равно оценит ваш оператор обновления и завершится ошибкой, даже если IF EXISTS равен false Вы можете использовать sp_executesql, чтобы обойти это:

declare @sql nvarchar(1000)
IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'Requested_By' and object_ID = object_ID(N'Service_Requests_Details')) 
BEGIN 
  set @sql = 'Update SR 
      Set SR.Requested_By  = SRD.Requested_By  
      FROM Service_Requests SR 
      INNER JOIN Service_Requests_Details SRD ON SRD.Request_Index = SR.Service_Request_Index'
  exec sp_executesql @sql
END 
GO 
2 голосов
/ 28 октября 2011

Это то, что я бы сделал в SQL 2008, если бы у меня не было экземпляра SQL 2005, чтобы посмотреть, работает ли он там, но стоит попробовать:

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Service_Requests_Details' AND COLUMN_NAME = 'Requested_By')
BEGIN
    ...
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...