14

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

有什么建议么?

4

2 回答 2

34

在您调用转换时,您尝试仅转换为nvarchar,这隐含意味着nvarchar(1),即没有空间让整个 guid 进行转换。

将其更改为

convert(nvarchar(36), @wfID)

它会起作用。

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

于 2013-09-10T09:05:47.557 回答
1

这工作正常'

    --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
于 2016-01-20T14:42:51.440 回答