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("http://localhost/TestWeb2/Test_Look.aspx?Test_ID='
+ convert(nvarchar, @wfID)
+ '");" /></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