2

은 cfstoredproc를 사용하여 저장 프로 시저를 만들 수 있습니까? 다음을 실행하면 구문이 잘못되었습니다. 'GO'근처에 구문이 있습니다..cfstoredproc을 사용하여 저장 프로 시저 만들기

<cffile action="read" file="mypath/myFile.sql" variable="sp_1"> 

<cfstoredproc procedure="sp_executesql" dataSource="#getDatasource()#"> 
    <cfprocparam type="in" cfsqltype = "cf_sql_varchar" value ='#sp_1#'> 
</cfstoredproc> 

myFile.sql

IF OBJECT_ID('getMyData', 'P') IS NOT NULL 
    DROP PROC getMyData 
GO 

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE getMyData 
    @some_var AS NVARCHAR(200) 
AS 
BEGIN 
    SET NOCOUNT ON; 
    DECLARE @sql AS NVARCHAR(MAX) 

     SET @sql = N'SELECT * FROM myTable where id = ''' + @some_var + ''' ' 

    EXEC sp_executeSQL @sql 

END 


<cfquery name="createGetMyData" dataSource="#getDatasource()#"> 
    #preservesinglequotes(sp_1)# 
</cfquery> 

result from running cfquery

+0

SSMS에서 해당 코드를 실행하면 절차가 만들어 지거나 오류가 발생합니까? –

+0

드라이브가 맘에 들지 않거나 오해를 불러 일으킬 수 있습니다. 내가 보는 유일한 것은 "PROC"입니다 ... 나는 대개 PROCEDURE라고 쓰여 있습니다. –

+0

다음은 몇 가지 다른 것들입니다. 입력 변수는 대개 괄호 안에 있습니다. - CREATE PROCEDURE getMyData (@some_var AS NVARCHAR (200))'set nocount를 사용하면 대개 세미콜론을 보지 못합니다. 따옴표 붙은 식별자가 ON 일 때 나는 대개 [dbo]. [getMyData] ...와 select 문과 같이 사용자 식별자 또는 dbo를 보았습니다. 나는 그들을 일상적으로 사용하지 않는다. 단지 그것을 믹스에 추가한다. –

답변

1

이 시도 :

<cffile action="read" file="mypath/myFile.sql" variable="sp_1"> 

<cfstoredproc procedure="sp_executesql" dataSource="#getDatasource()#"> 
    <cfprocparam type="in" cfsqltype = "cf_sql_varchar" value ='#preservesinglequotes(sp_1)#'> 
</cfstoredproc> 

ColdFusion은 DB 변수에 작은 따옴표를 이스케이프합니다.

편집 :

는 두 번째 문장의 배치가있다. 드라이브는 "GO"키워드가 준비된 일괄 처리의 표시기라는 단일 문장으로 쿼리를 배치합니다. 즉, 귀하의 "GO"는 실제로 문제입니다.

수정하려면 2 개의 쿼리를 실행해야합니다. 하나는 삭제하고 다른 하나는 만들 수 있습니다. 왜? 실제로 CREATE PROCEDURE는 지정된 일괄 처리의 첫 번째 문이어야합니다. MSSQL 스튜디오에서 GO를 사용하여 3 개의 배치를 작성하면 이제는 어떻게 사용할지 파악해야합니다.

좋은 소식은 ANSI null 및 따옴표 붙은 식별자가 필요하지 않을 것입니다. 대부분의 인스턴스에서 기본값으로 설정됩니다.

이 정보가 도움이됩니까?

+0

여전히 동일한 오류가 발생합니다. 'GO'근처의 구문이 잘못되었습니다. DB에서 직접 저장 프로 시저를 생성하는 코드를 실행할 때 문제가 없습니다. –

+0

그리고 cfquery (다시 preservesinglequotes()를 사용하여 시도 할 때)? –

+0

cfquery –