web-dev-qa-db-ja.com

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に変換する際の算術オーバーフローエラー。

助言がありますか?

10
Petty

convertの呼び出しでは、nvarcharに変換しようとします。これは、暗黙的にnvarchar(1)を意味します。つまり、GUID全体を格納する余地はありません。変換されます。

に変更します

_convert(nvarchar(36), @wfID)
_

そしてそれは動作します。

奇妙な理由で、MSSQLはSELECT CONVERT(nvarchar,NEWID())を実行すると算術オーバーフローを発生させますが、SELECT CONVERT(varchar,NEWID())を実行すると適切な「不十分な結果スペース」を提供します。

25
krisku

これは正常に機能しています」

    --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
1
Veera Sekhar