【问题标题】:Nvarchar and text are incompatible in the add operatorNvarchar 和 text 在 add 运算符中不兼容
【发布时间】:2013-09-13 21:41:46
【问题描述】:

对于 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 时出现算术溢出错误。

有什么建议吗?

【问题讨论】:

    标签: sql sql-server-2008 guid nvarchar


    【解决方案1】:

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

    改成

    convert(nvarchar(36), @wfID)
    

    它会起作用的。

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

    【讨论】:

    • 优秀。工作正常:)
    【解决方案2】:

    一切正常'

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多