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に変換する際の算術オーバーフローエラー。
助言がありますか?
convertの呼び出しでは、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