Создание URL-адреса в ссылке SQL

#sql #sql-server #string

#sql #sql-сервер #строка

Вопрос:

Я пытаюсь создать ссылку в SQL, но я всегда получаю ошибку при преобразовании

 SELECT DISTINCT ', '   CONVERT(nvarchar(max),'<a href="javascript:void(0);" onclick=doit("openme","amp;id="'   id   '"<a>')
FROM mytable 
  

Если я использую cast вокруг идентификатора, это работает, но нужно ли мне добавлять cast к каждому отдельному значению, которое я использую?

Ответ №1:

Я подозреваю, что id это число, а не строка. При запросе смешанных числовых и строковых операндов SQL Server пытается принудительно преобразовать строку в число, чего вы не хотите.

Используется простое решение concat() : эта функция принудительно преобразует строку для всех своих операндов.

 SELECT CONCAT(
        ', ',
        '<a href="javascript:void(0);" onclick=doit("openme","amp;id="',
        id,
        '"<a>'
    ) newval
FROM mytable
  

Ответ №2:

Используется CONCAT для неявного преобразования значений в (n)varchar :

 SELECT CONCAT(', ','<a href="javascript:void(0);" onclick=doit("openme","amp;id="', id,'"<a>')
FROM mytable;
  

Здесь также нет необходимости использовать MAX длину, поскольку мы можем с уверенностью сказать, что ваш id столбец не будет содержать и близко 8000 символов.

Ответ №3:

Предполагая, что вы используете SQL Server 2016 , и это id an int , вы FORMATMESSAGE также можете использовать.

 SELECT 
    FORMATMESSAGE( ', <a href="javascript:void(0);" onclick=doit("openme","amp;id="%i"<a>', id ) AS link
FROM mytable;
  

Комментарии:

1. но я использую материал, и это, похоже, не является решением проблемы

2. @Jan Вы используете STUFF as в функции? Если да, можете ли вы обновить свой вопрос полным примером того, что вы пытаетесь? Также, пожалуйста, пометьте свою версию SQL Server.