2012-03-26 10 views
0

私はこのコードを実行しようとしています:SQL ServerとGUID?

exec myStoredProcedure 
    Cast('c5b48202-36af-4597-9780-5366d4188f55' AS uniqueidentifier), 
    744, 
    1, 
    'test', 
    'Chrysanthemum.jpg', 
    '2012-03-26 16:22:17', 
    1, 
    28402, 
    null 

をしかし、私は、次の例外を取得

メッセージ102、レベル15、状態1、行2
「 付近に正しくない構文c5b48202-36af- 4597-9780-5366d4188f55 '。

なぜですか?そして私はそれをどのように修正するのですか?

+0

あなたはおそらく、そのパラメータリストに関数呼び出しを持つことができない、(それはあなたのためにそれをキャストします)のキャストを削除することができます。 – dotjoe

答えて

1

明らかに、パラメータリストではキャストを使用できません。私はちょうど私が少しテストを実行したので、私はちょっと試してみたかった:

create procedure myProc 
@param1 uniqueidentifier 
as 
begin 
select 1 
end 


exec myProc Cast('c5b48202-36af-4597-9780-5366d4188f55' AS uniqueidentifier) -- fails 
exec myProc 'c5b48202-36af-4597-9780-5366d4188f55' --ok 
3

ストアドプロシージャを呼び出すときにCASTを実行することはできません。あなたはspを実行する前にそれを変数に代入するか、VARCHARをそのまま渡します(暗黙のキャストはうまくいくでしょう)。

DECLARE @GUID UnIQUEIDENTIFIER 
SET @GUID = 'c5b48202-36af-4597-9780-5366d4188f55' 

EXEC myStoredProcedure @GUID, 744, 
    1, 
    'test', 
    'Chrysanthemum.jpg', 
    '2012-03-26 16:22:17', 
    1, 
    28402, 
    null 
+0

これは私に次のような威力を与えます:メッセージ8114、レベル16、状態5、プロシージャmyStoredProcedure、行0 データ型nvarcharをuniqueidentifierに変換中にエラーが発生しました。 – Banshee

+0

@SnowJim - これはストアドプロシージャ内のエラーですが、変数の変換はうまくいきます(投稿する前にテストしました)。この競合を引き起こすsp内のデータ型を比較す​​る必要があります。 – Lamak

+0

@SnowJim、格納されたporcの最初のパラメータをどのように定義しましたか?エラーメッセージから、一意識別子ではなくnvarcharとして定義されているように見えます。 – HLGEM

0

EXECコマンドで計算を使うことはできません。

あなたは、このようにしなければならない。

DECLARE @guid uniqueidentifier 

SET @guid = 'c5b48202-36af-4597-9780-5366d4188f55' 

exec myStoredProcedure 
    @guid, 
    744, 
    1, 
    'test', 
    'Chrysanthemum.jpg', 
    '2012-03-26 16:22:17', 
    1, 
    28402, 
    null