Как я могу объединить строку с битовым (documentTitle + Archive) SQL-сервером 2005 - PullRequest
2 голосов
/ 29 января 2009

Я получаю следующую ошибку при попытке объединить Тип операнда clash: текст несовместим с битом Неверный оператор для типа данных: Оператор равен Добавить, Тип равен бит

SELECT
  F.SubmissionId, F.FormId, 
  F.DocumentTitle + F.Archive AS DocumentTitle,
  F.Keywords, F.PublishDate, F.PostedDate, F.ExpiredDate, 
  F.IsFlag, F.IsAdminOnly, F.IsCompleted, F.IsPublished,
  F.CreatedDate, F.AllowComments, 
  CASE WHEN F.Archive = 1 THEN 'Yes' ELSE 'No' END AS Archive, 
  I.ItemId, I.SubmissionId AS Expr1, I.ParamId, I.ParamValue
FROM
  dbo.app_FormSubmission AS F
    INNER JOIN dbo.app_FormSubmissionItems AS I ON 
      F.SubmissionId = I.SubmissionId

Ответы [ 3 ]

7 голосов
/ 29 января 2009

вам нужно конвертировать, запустите это, чтобы увидеть, что я имею в виду

declare @i bit
select @i = 1

select 'abc'  + convert(varchar(1),@i) -- fine
select 'abc'  + @i  -- will fail
2 голосов
/ 29 января 2009

Почему бы вам не сделать это на уровне представления, каким бы оно ни было в вашем случае?

Если это не вариант, то вот что я бы сделал. Во-первых, я бы проверил, работает ли оператор case , как ожидалось, и если бы он работал, я бы использовал SQL-функцию concat для объединения строк.

И убедитесь, что при использовании F.Archive в F.DocumentTitle + F.Archive вы на самом деле ссылаетесь на результат предложения case , а не на исходный столбец.

1 голос
/ 29 января 2009

Я должен был сделать это, чтобы это сработало. Спасибо SQLMenace

SELECT CONVERT (varchar (50), F.DocumentTitle) + CONVERT (varchar (1), F.Archive) AS Expr1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...