我需要將一個列表傳遞給我的SQL Server存儲過程。我已生成的列表中,這是一個逗號分隔的使用數字的列表:我想將一個評估列表傳遞給我的SQL Server存儲過程
<cfquery name="House" datasource="#application.datasource#">
SELECT cGLsubaccount
FROM HOUSE
WHERE Right(cGLsubaccount,3) IN
(
<cfloop index="i" list="#consulsub#">
<cfoutput>#right(Trim(i) , 3)#,</cfoutput>
</cfloop>
00000000
)
</cfquery>
<cfset GLsubacct = Valuelist(House.cGLsubaccount,",")>
現在,我將它傳遞到使用cfprocparam
與cfsqltype爲varchar(1000)的存儲過程。 (我在google上讀到這是將列表傳遞給存儲過程的方式)。
<cfprocparam type="IN" value="#GLsubacct#" DBVARNAME="@GLsubacct" cfsqltype="cf_sql_varchar">
在存儲過程中,我這樣做:
ALTER PROCEDURE [rw].[sp_EFT_NoticeXLS2] (
@Scope varchar(50)
, @AcctPeriod char(6)
, @CompanyID nchar(10)
, @GLsubacct varchar(1000) = NULL
)
AS......
,並在存儲過程中的SQL語句如下:
CREATE TABLE #Houses (
iHouse_ID int,
cName varchar(50),
cNumber varchar(10),
cPhoneNumber1 varchar(25),
cAddressLine1 varchar(50),
cCity varchar(30),
cStateCode varchar(2),
cZipCode varchar(10),
iUnitsAvailable int,
iRegOpsNumber int,
cOpsName varchar(50),
iRegionID int,
cRegionName varchar(50)
)
INSERT INTO #Houses (
iHouse_ID,
cName,
cNumber,
cPhoneNumber1,
cAddressLine1,
cCity,
CStateCode,
cZipCode,
iUnitsAvailable,
iRegOpsNumber,
cOpsName,
iRegionID,
cRegionName)
SELECT
h2.iHouse_ID,
h.cName,
h.cNumber,
h.cPhoneNumber1,
h.cAddressLine1,
h.cCity,
h.CStateCode,
h.cZipCode,
h.iUnitsAvailable,
r.RegOpsNumber,
r.opsname,
r.iRegion_ID,
r.regionname
FROM rw.fn_GetScopeHouses (@Scope, @dtReport, NULL, NULL, 0) h2
JOIN House h on h.iHouse_ID = h2.iHouse_ID
AND h.cCompanyID = @CompanyID
AND (@GLsubacct IS NULL OR h.iHouse_ID IN ('+ @GLsubacct +'))
JOIN rw.vw_Reg_Ops r on r.opsareaID = h.iOpsArea_ID
的問題是,我得到一個錯誤。錯誤信息是...
Error Executing Database Query.
[Macromedia][SQLServer JDBC Driver][SQLServer]Conversion failed when converting the varchar value '+ @GLsubacct +' to data type int.
The error occurred in E:\inetpub\wwwroot\intranet\TIPS4\Admin\EFTprocesspullfile.cfm: line 46
44 : <cfprocparam type="IN" value="#CompanyID#" DBVARNAME="@CompanyID" cfsqltype="cf_sql_varchar"><!--- TPecku added variable to be passed to the stored Proc --->
45 : <cfif CompanyID EQ 0000>
46 : <cfprocparam type="IN" value="#GLsubacct#" DBVARNAME="@GLsubacct" cfsqltype="cf_sql_varchar">
47 : </cfif>
48 : </cfstoredproc>
錯誤在存儲過程中,因爲那是我的'+ @GLsubacct +'。 關於我在做什麼的任何想法都是錯誤的? (對不起,很長一段時間,我想盡可能詳細地描述我在做什麼
查看錶值參數(TVP),這可能是您想要使用而不是傳遞字符串。 https://msdn.microsoft.com/en-us/library/bb510489.aspx – rjdevereux
謝謝rjdevereux,我看着你的鏈接,但我仍然困惑於如何前進。 – Tetteh
那麼,你有幾個選擇。一種是使用字符串解析功能。以下是一些你可以做到的方法:https://sqlperformance.com/2012/07/t-sql-queries/split-strings。一種是將表傳遞給存儲過程。要做到這一點,你需要創建一個類型(如上面的鏈接),然後使用它作爲你的過程的'READONLY'參數。無論您選擇什麼選項,您都希望更改您的過程以加入表格(分割值表或您使用的tvp)。 – ZLK