Nvarchar и text несовместимы в операторе add

С SQL Server 2008 я хотел бы добавить переменную (@wfID) в текст, как показано ниже:

 DECLARE @wfID uniqueidentifier
 SET @wfID = NEWID()

'<META http-equiv="Content-Type" content="text/html; " />  <br><input type="button"
    value="" onclick="window.open(&quot;http://localhost/TestWeb2/Test_Look.aspx?Test_ID='
    + convert(nvarchar, @wfID)
    + '&quot;);" /></br>',

Итак, я хотел бы добавить @wfID в тексте, но он всегда говорит

типы данных nvarchar и text несовместимы в операторе add.

Я попытался преобразовать все в nvarchar, но потом я получил это:

ошибка арифметического переполнения при преобразовании выражения в тип данных nvarchar.

какие предложения?

2 ответов


в вызове преобразование вы пытаетесь преобразовать в just nvarchar что косвенно означает nvarchar (1), т. е. нет места для преобразования всего guid.

изменить на

convert(nvarchar(36), @wfID)

и оно будет работать.

по какой-то странной причине MSSQL дает арифметическое переполнение, если делает SELECT CONVERT(nvarchar,NEWID()) но дает правильное "недостаточное пространство результатов", если делать SELECT CONVERT(varchar,NEWID()).


это работает нормально'

    --EXECUTE usp_TEST
    CREATE PROCEDURE [dbo].[usp_TEST](

    @UserID nvarchar(max) ='82F1A3A6-4DC6-481F-9046-856270E66468'
    )
    AS
    BEGIN
    declare @sqlwhere1 nvarchar(max)=''
    SELECT   @sqlwhere1= 'SELECT * 
        FROM [yourtablename] WITH(NOLOCK) WHERE '

        IF(@UserID <> '')
        BEGIN 
         SELECT @sqlwhere1=@sqlwhere1 +' convert(nvarchar(max),UserId)= '''+convert(nvarchar(max),@UserID)+'''' 
        END 

    EXECUTE (@sqlwhere1) 

    END