PDA

View Full Version : اشکال در اجرای یک stored procedure



s-soleimani
دوشنبه 05 آبان 1393, 23:25 عصر
سلام دوستان
من وقتی دستورات ذیل رو اجرا میکنم جواب میگیرم
[ USE [MB5
GO
[alter PROCEDURE [dbo].[test
AS
begin
select id from ACCyear

end

ولی وقتی همین دستورات رو به شکل زیر در sp مینویسم جواب نمیده





[USE [MB5
GO
[ALTER PROCEDURE [dbo].[myproc
AS
begin
;(DECLARE @SPname VARCHAR(4000


+(set @SPname= 'use [MB5]'+ char(10)+'GO'+char(10)+'alter PROCEDURE [dbo].[test]'+char(10
;'AS'+char(10)+'begin'+char(10)+'select id from ACCyear'+char(10)+'end'


;(EXEC(@SPname
end




وبعد از اجرای sp فوق پیغام خطای زیر نشون داده میشه
Msg 102, Level 15, State 1, Line 2
Incorrect syntax near 'GO'.
Msg 111, Level 15, State 1, Line 5
'CREATE/ALTER PROCEDURE' must be the first statement in a query batch.




ممنون میشم راهکار بدید

pezhvakco
سه شنبه 06 آبان 1393, 09:51 صبح
نمیدونم چرا همچین کد دستوری نوشتین (= ویرایش یک SP از داخل SP دیگر اون هم به این روش)

ولی شاید این باشه

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'test') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[test]
GO
create PROCEDURE [dbo].[test]
AS
BEGIN
select * from mytable
END
GO
کمی در روش خودتون بازنگری داشته باشین و جستجو هم در بین همه داشته باشین

s-soleimani
سه شنبه 06 آبان 1393, 20:56 عصر
حقیقتش موضوع اینه که من میخوام تمام sp هام رو با کد کپی کنم به یک دیتابیس جدید برای همین هم اول Sp هارو کپی میکنم داخل یک آرایه شبیه کاری که بالا انجام دادم sp داخل یک رشته ریخته شده بعدا در دیتابیس جدید اون رشته رو اجرا میکنم . به این ترتیب sp ها در دیتابیس جدید ساخته میشن

آیا این مساله راه دیگه ای داره؟

Rejnev
سه شنبه 06 آبان 1393, 21:54 عصر
اجرای رشته حاوی دستورات اس کیو ال توسط پروسیجر sp_executesql امکان پذیره:

exec sp_executesql N'drop table x; create table y(name nvarchar(100))'

pezhvakco
چهارشنبه 07 آبان 1393, 08:57 صبح
حقیقتش موضوع اینه که من میخوام تمام sp هام رو با کد کپی کنم به یک دیتابیس جدید
آیا این مساله راه دیگه ای داره؟

همیشه راه دیگری هست =>
از پایگاه داده فعلی یک خروجی اسکریپت (Generate Scripts) بسازید و ان را برای پایگاه داده جدید اجرا نمایید .

s-soleimani
چهارشنبه 07 آبان 1393, 18:41 عصر
همیشه راه دیگری هست =>
از پایگاه داده فعلی یک خروجی اسکریپت (Generate Scripts) بسازید و ان را برای پایگاه داده جدید اجرا نمایید .

خوب نمی خوام دستی ایجاد کنم. این پروسه قراره هر زمانی که کاربر پروژه، بخواد سال جدیدی ایجاد کنه اجرا بشه. یعنی دیتابیس جدید براش ساخته بشه. پس به اختیار من نیست!!!!

باید کد بنویسم که خودکار این کار انجام بشه. نه با
Generate Scripts

pezhvakco
پنج شنبه 08 آبان 1393, 08:02 صبح
یعنی دیتابیس جدید براش ساخته بشه

برای ساخت یک پایگاه داده از روی پایگاه داده دیگه، روش دیگری هم است = Backup And Restore


باید کد بنویسم که خودکار این کار انجام بشه. نه باGenerate Scripts

همین Script ، کد دستور است .
یعنی چی خودکار اجرا بشه = فرمان اجرای کد دستور های این Scripts رو می دهید .

s-soleimani
پنج شنبه 08 آبان 1393, 19:16 عصر
برای ساخت یک پایگاه داده از روی پایگاه داده دیگه، روش دیگری هم است = Backup And Restore


همین Script ، کد دستور است .
یعنی چی خودکار اجرا بشه = فرمان اجرای کد دستور های این Scripts رو می دهید .
سلام ببخشید چطور از پایگاه داده فعلی یک خروجی اسکریپت بسازم (منظورم رو متوجه شدید!!! با کد می خوام این خروجی ساخته بشه نه بصورت دستی!!!!! )
میشه راهنمایی کنید چطور یک خروجی اسکریپت بسازم و برای دیتابیس جدید اجراش کنم؟؟؟

ضمن تشکر از توجه شما

حمیدرضاصادقیان
پنج شنبه 08 آبان 1393, 19:57 عصر
سلام
اینجا (https://dbscripter.codeplex.com/) رو ببینید

s-soleimani
دوشنبه 12 آبان 1393, 14:24 عصر
سلام آقای صادقیان من میخوام توی SQL SERVER این کارو انجام بدم نه توی سی شارپ و .....

pezhvakco
سه شنبه 13 آبان 1393, 17:51 عصر
من میخوام توی SQL SERVER این کارو انجام بدم
در SQL می توانید از : پایگاه داده ، جدول ها، رویه ها، تریگر ها و یا هر کدام از اشیا دیگر یک فایل Script بسازید (یک فایل متنی است) و هر جا (سیستم دیگر) که خواستین با هر برنامه ای اجرا بزنید تا همه اشیا مورد نظر شما ساخته بشه .