2012-02-27 5 views
2

SQL文字列にGUID型を追加してクエリを取得する際に問題が発生します。名前データベースをパラメータとして渡す必要があるため、sqlを記述する必要があります。GUIDパラメータをSQL文字列に追加する

次のコードは私がやろうとしていることですが、それはうまくいきません。私が何をしても、GUIDは正しく読み込まれません。ストアドプロシージャを実行すると、次のエラーが表示されます。おそらくguidに " - "が含まれている可能性があります。

' - 'に近い構文が正しくありません。

ここでは、コードです:

ALTER PROCEDURE [dbo].[templatesAndBaskets_Select] 
@guid uniqueidentifier, 
@DatabaseName varchar(50) 
AS 
BEGIN 
Declare @sql varchar(max) 

Set @sql= 

'select soldtoid 
from ' + @DatabaseName + '.templatesAndBaskets' + 
' where ordergroupid = ' + CONVERT(varchar(max),@guid) 

print @sql 
EXECUTE SP_EXECUTESQL @sql 
END 
+1

'の間@guidを入れて – AaronS

+0

@Aaron質問を更新しました。ストアドプロシージャは準拠していますが、動作しません。 –

答えて

5

おそらく、単にGUIDを中心に単一引用符を配置する必要があります。

SET @sql = 
    N'SELECT soldtoid FROM ' + @DatabaseName + N'.templatesAndBaskets' + 
    N' WHERE ordergroupid = ''' + CONVERT(nvarchar(max), @guid) + N'''' 

SQL文でこのような何かをもたらすはずである:

SELECT soldtoid FROM database.templatesAndBaskets 
WHERE ordergroupid = '5E736CE7-5527-40ED-8499-2CA93FC7BC9C' 

有効です - あなたのものGUIDの周りの単一引用符なしでは有効ではありません...

更新:あなたもsp_ExecutesqlためNVARCHARにご@sql変数を変更する必要がある - これを試してみてください。

ALTER PROCEDURE [dbo].[templatesAndBaskets_Select] 
    @guid uniqueidentifier, 
    @DatabaseName NVARCHAR(50) 
AS 
BEGIN 
    DECLARE @sql NVARCHAR(MAX) 

    SET @sql = 
     N'SELECT soldtoid FROM ' + @DatabaseName + N'.templatesAndBaskets' + 
     N' WHERE ordergroupid = ''' + CONVERT(nvarchar(max), @guid) + N'''' 

    PRINT @sql 
    EXECUTE sp_ExecuteSQL @sql 
END 

はその仕事をします?

+0

これを実行しようとしましたが、同じエラーが発生しています。 ' - 'の近くに構文が正しくありません。 –

+0

@NickLaMarca:あなたは** 200%確信しています**あなたはGUIDの周りに余分な一重引用符で自分の順応したコードを使用しましたか?あなたは 'PRINT'ステートメントから何を得ますか?私たちにそれを見せてもらえますか? –

+0

私はvarchar型に頭の良いのparamを変更し、これを取得する: –

0

質問は何ですか?

ALTER PROCEDURE [dbo].[templatesAndBaskets_Select] 
@guid uniqueidentifier, 
@DatabaseName varchar(50) 
AS 
BEGIN 
Declare @sql varchar(max) 

Set @sql= 

"select soldtoid from " + @DatabaseName + ".templatesAndBaskets" + 
" where ordergroupid = '" + CONVERT(varchar(max),@guid)+"'" 

print @sql 
EXECUTE SP_EXECUTESQL @sql 
END 
関連する問題