Nvarchar和文本在add运算符中不兼容

时间:2013-09-10 08:54:45

标签: sql sql-server-2008 guid nvarchar

使用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 个答案:

答案 0 :(得分:24)

在您对转换的调用中,您尝试转换为 nvarchar ,这隐含地意味着 nvarchar(1),即没有空间整个指导要转换。

将其更改为

convert(nvarchar(36), @wfID)

它会起作用。

由于某些奇怪的原因,MSSQL在执行SELECT CONVERT(nvarchar,NEWID())时会产生算术溢出,但在执行SELECT CONVERT(varchar,NEWID())时会给出正确的“不足的结果空间”。

答案 1 :(得分:1)

这很好用&#39;

    --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