2012-02-27 4 views
2

SQL 문자열에 GUID 유형을 추가하고 쿼리를 가져 오는 데 문제가 있습니다. 이름 데이터베이스를 매개 변수로 전달해야하므로 sql을 작성해야합니다.SQL 문자열에 GUID 매개 변수 추가

다음 코드는 내가하려고하는 것이지만 작동하지 않습니다. 어떤 일을해도 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 질문을 업데이트했습니다. 저장된 proc 준수하지만 작동하지 않습니다 –

답변

5

당신은 아마 단순히 GUID 주위에 따옴표를 넣어해야합니다

을이 같은 SQL 문 뭔가 발생한다
SET @sql = 
    N'SELECT soldtoid FROM ' + @DatabaseName + N'.templatesAndBaskets' + 
    N' WHERE ordergroupid = ''' + CONVERT(nvarchar(max), @guid) + N'''' 

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

quid param을 varchar로 변경하고 다음을 얻습니다. –

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