PDA

View Full Version : ایراد این sp کجاست؟



Mahdad999
دوشنبه 15 اسفند 1390, 19:05 عصر
سلام خدمت اساتید بخش T-SQL
من تو این قسمت مهمونم (اطلاعاتم راجع به sql در حد راه انداختن کارم هستش)
راستش تو سایت گشتم برای ذخیره اطلاعات یک فاکتور (سر فاکتور در شامل یک بار در جدول master و ریز فاکتور شامل چند ردیف کالای مختلف در جدول detail) با یک با ارسال کل اطلاعات از محیط برنامه نویسی به یک sp به این نتیجه رسیدم که بهترین راه استفاده از xml (مشکل دو تا شد!) برای پاس کردن کل اطلاعات به sp و سپس تجزیه اطلاعات هستش (اگه از نظر منطقی اگه راه بهتری هست لطفا راهنمایی بفرمایید)
یه نمونه sp پیدا کردم و به فرم زیر تغییرش دادم ولی ارور داره اگه ممکنه دوستان یه نگاه به کدها بکنید به نظر کجای کد ایراد داره؟ در ضمن این قسمتی کلی از sp هستش واسه انتهای کار من کدهای ترنزکشن و ... رو بهش اضافه میکنم


CREATE PROCEDURE Insert_GatePass_XML
@GPId int
, @GPType tinyint
, @GPDate nchar(10)
, @GPNum nvarchar(20)
, @GPDetailId int
, @GPUserName nvarchar(50)
, @GPBossName nvarchar(50)
, @GPReturnDate nchar(10)
, @goodsId int
, @GPQuantity int
, @GPUsingPlace nvarchar(100)
, @xmlString VARCHAR(MAX)

AS
BEGIN
DECLARE @xmlHandle INT
--Create Temp tables:
DECLARE @stagingTableMaster TABLE
(
GPType tinyint
, GPDate nchar(10)
, GPNum nvarchar(20)
, GPUserName nvarchar(50)
, GPBossName nvarchar(50)
, GPReturnDate nchar(10)
)
DECLARE @stagingTableDetail TABLE
(
--GPDetailId int identity (1,1)
goodsId int
, GPId int
, GPQuantity int
, GPUsingPlace nvarchar(100)
)
--
EXEC sp_xml_preparedocument @xmlHandle output, @xmlString
-------

insert into @stagingTableMaster
select
GPType
, GPDate
, GPNum
, GPUserName
, GPBossName
, GPReturnDate
from
openXML (@xmlHandle, '/NewDataSet/SampleDataTable',1)
WITH (
GPType tinyint @GPType
, GPDate nchar(10) @GPDate
, GPNum nvarchar(20) @GPNum
, GPUserName nvarchar(50) @GPUserName
, GPBossName nvarchar(50) @GPBossName
, GPReturnDate nchar(10) @GPReturnDate
)
insert into @stagingTableDetail
select

goodsId
, GPId
, GPQuantity
, GPUsingPlace
from
openXML (@xmlHandle, '/NewDataSet/SampleDataTable',1)
with(
goodsId int @goodsId
, GPId int @GPId
, GPQuantity int @GPQuantity
, GPUsingPlace nvarchar(100) @GPUsingPlace
)

insert into GatePassMaster(
GPType
, GPDate
, GPNum
, GPUserName
, GPBossName
, GPReturnDate)
(select
GPType
, GPDate
, GPNum
, GPUserName
, GPBossName
, GPReturnDate)
insert into GatePassDetail(
goodsId
, GPId
, GPQuantity
, GPUsingPlace)
(select
goodsId
, GPId
, GPQuantity
, GPUsingPlace)



END
Go


اروری که میده اینه:


Msg 207, Level 16, State 1, Procedure Insert_GatePass_XML, Line 87
Invalid column name 'GPType'.
Msg 207, Level 16, State 1, Procedure Insert_GatePass_XML, Line 88
Invalid column name 'GPDate'.
Msg 207, Level 16, State 1, Procedure Insert_GatePass_XML, Line 89
Invalid column name 'GPNum'.
Msg 207, Level 16, State 1, Procedure Insert_GatePass_XML, Line 90
Invalid column name 'GPUserName'.
Msg 207, Level 16, State 1, Procedure Insert_GatePass_XML, Line 91
Invalid column name 'GPBossName'.
Msg 207, Level 16, State 1, Procedure Insert_GatePass_XML, Line 92
Invalid column name 'GPReturnDate'.
Msg 207, Level 16, State 1, Procedure Insert_GatePass_XML, Line 99
Invalid column name 'goodsId'.
Msg 207, Level 16, State 1, Procedure Insert_GatePass_XML, Line 100
Invalid column name 'GPId'.
Msg 207, Level 16, State 1, Procedure Insert_GatePass_XML, Line 101
Invalid column name 'GPQuantity'.
Msg 207, Level 16, State 1, Procedure Insert_GatePass_XML, Line 102
Invalid column name 'GPUsingPlace'.




که مربوط میشه به دو تا select آخر sp که توی Insert های GatePassMaster و GatePassDetail نوشتم

mina_ghorbani
چهارشنبه 17 اسفند 1390, 12:32 عصر
من كامل كد رو نگاه نكردم فقط insert آخر رو نگاه كردم مشكل اينه اگر اشتباه نكنم:
دو تا insert اي كه آخر نوشتي براي select ات FROM نذاشتي
اگر select ات متغير سلكت كرده هم بايد @ مي ذاشتي