是否可以使用cfstoredproc 创建存储过程?当我运行以下内容时,我在'GO'附近得到不正确的语法。
<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>
答案 0 :(得分: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变量中转义单引号。
编辑:
其次是批量陈述。驱动器会将您的查询批处理为单个语句,而不是&#34; GO&#34; keyword是批量准备的指标。换句话说,你的&#34; GO&#34;实际上是问题。
要解决此问题,您需要运行2个查询 - 一个要删除,另一个要创建。为什么?因为CREATE PROCEDURE实际上必须是给定批次中的第一个语句。在MSSQL工作室中,使用GO,你创建了3批,现在你必须弄清楚如何使用它。
好消息是您的ANSI空值和带引号的标识符可能不需要 - 它们在大多数情况下都是默认的。
这有帮助吗?