View Full Version : لطفا بگید این پیغام خطا چیه
mehdi_moosavi
شنبه 14 شهریور 1383, 17:42 عصر
سلام به همه دوستان
من چند خط کد زیر رو توی یک stored procedures مینویسم
select * into table2 from table1
alter table table2 add field2 float
update table2 set field2=0
ولی بااجرای اون پیغام خطای زیر ظاهر میشه
Server: Msg 207, Level 16, State 1, Procedure p1, Line 4
Invalid column name 'field2'.
بنظر شما اشکال کار در کجاست؟
vadood
شنبه 14 شهریور 1383, 23:06 عصر
ALTER TABLE رو در ابتدای یه batch استفاده کنی، برای این کار قبلش یه عبارت GO اضافه کن
...
GO
alter table table2 add field2 float
...
mehdi_moosavi
یک شنبه 15 شهریور 1383, 00:58 صبح
سلام آقای مدیر
متشکر از جوابتون
ولی مشکل من حل نشد
اینکه گفتید قبل از دستور alter از go استفاده کنم در QA جواب میده ولی وقتی دستورات رو داخل یک stored procedures مینویسم خودش دستورات بعد از go رو حذف میکنه .
اگه میشه بیشتر توضیح بدین
من دستورات زیر رو داخل یک stored procedure نوشتم
select * into table2 from table1
go
alter table table2 add field2 float
go
update table2 set field2=0
ولی دستورات بعد از go رو حذف کرد
یعنی نمیشه این دستورات رو داخل یک storde procedures نوشت؟
AminSobati
یک شنبه 15 شهریور 1383, 13:14 عصر
دوست عزیزم،
اگر از دستور Update صرف نظر کنیم و مقدار اولیه 0 برای field2 رو از طریق Constraint موقتی تامین کنیم، مشکل حل خواهد شد:
CREATE PROC P1 AS
select * into table2 from table1
alter table table2 add field2 float constraint tmpConst default 0 with values
alter table table2 drop constraint tmpConst
mehdi_moosavi
یک شنبه 15 شهریور 1383, 18:59 عصر
سلام دوست عزیز
ضمن تشکر ازجوابت متاسفانه نمیشه از update صرفنظر کرد
مقدار صفری رو که من گفتم فقط برای مثال بود
حاصل این فیلد جدید باید محاسبه بشه و فقط یه مقدار پیش فرض نیست
راهی که جواب داد این بود که دستور update رو توی یک stored proc دیگه نوشتم
و از stored proc اول اونو call کردم
فقط میخوام بدونم اگه از پیش فرض استفاده نکنم نمیشه تمام دستورات رو داخل یک proc بنویسم؟
ممنون از راهنماییت
vadood
یک شنبه 15 شهریور 1383, 19:06 عصر
این هم میشه ها،
select *, 0 as field2 into table2 from table1
AminSobati
دوشنبه 16 شهریور 1383, 17:15 عصر
بسیار خوب،
اگر الزاما باید از Update استفاده کنین، دو راه حل دیگه وجود داره برای اینکه از call کردن Procedure تو در تو بینیاز بشین:
create proc p1 as
select *, cast(null as float) as field2 into table2 from table1
update table2 set field2=0
go
که در حقیقت روشی هست که ودود عزیز در post قبلی اشاره کردن. من فقط float بودنش رو اضافه کردم.
یا اینکه از Dynamic TSQL Execution استفاده کنید(این روش بسیار انعطاف پذیر تر هست):
create proc p1 as
select * into table2 from table1
alter table table2 add field2 float
exec sp_executesql N'update table2 set field2=0'
go
موفق باشید
mehdi_moosavi
سه شنبه 17 شهریور 1383, 11:26 صبح
خیلی متشکر
مشکلم حل شد
مخصوصا با استفاده از
select *,0وهمچنین
select *, cast(0 as float) as field2
AminSobati
سه شنبه 17 شهریور 1383, 14:23 عصر
موفق باشید :)
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.