PDA

View Full Version : سوال: اسكريپت مرتب



A.Nemati
دوشنبه 18 آبان 1388, 19:25 عصر
سلام به همه اساتيد
يه ديتابيس دارم با كلي StoreProcedure و View و Function در SQL Server 2000
هر وقت از اين ديتابيس اسكريپت كلي تهيه مي‌كنم، كلي خطا دارم كه فلان sp فلان view رو نمي‌شناسه و ... خلاصه هر دفعه كلي بايد وفت صرف كنم تا مرتبش كنم.

چه طوري مي‌شه اين مشكل رو حل كرد؟
چه طوري مي‌شه يه اسكريپت مرتب گرفت؟

A.Nemati
شنبه 23 آبان 1388, 23:58 عصر
يعني هيچ كدوم از دوستان و اساتيد اين بخش جوابي ندارن؟

Reza.ariyan
یک شنبه 24 آبان 1388, 08:02 صبح
1 . با این توضیحاتی که دادی فکر نمیکنم کسی بتونه مشکل کارتو حدس بزنه : (يه ديتابيس دارم با كلي StoreProcedure و View و Function در SQL Server 2000 !!!)
2 . منظورت از اسکریپت مرتب سازی چیه و میخوای بر چه اساسی و چطور مرتب بشه ؟
3 . این موضوع که چطوری میشه یه اسکریپت مرتب گرفت : اگه منظورت اینه که چطور میشه رکورد ها رو مرتب کرد با Order by و اگه منظورت دادن یه فیلد ردیف هست با Rank Over
سوال خیلی گنگی بود انصافا

A.Nemati
سه شنبه 26 آبان 1388, 05:45 صبح
بالاخره يكي گفت خرت به چند!

دوست عزيز. ببخشيد كه توضيحات گنگ بود. خودم فكر مي‌كردم كه واضهه.
منظور از گرفتن اسكريپت كلي اينه كه راست كليك روي اسم ديتابيس مي‌كنم، بعدش گزينه All Tasks و انتخاب گزينه ...Generate SQL Script و بقيه ماجرا.
منظور از مرتب نبودنش اينه كه وقتي اين اسكريپت رو باز مي‌كنم، مي‌بينم كه چيدمان آبجكت‌ها درست نيست. يعني به جاي اينكه اول Functionها، بعد Viewها و بعدش Stored Procedureها باشن، اول Viewها هستن و Functionها آخرن!
تازه اين قسمت خوب ماجراست چرا كه تو خود آبجكت‌ها هم چيدمان درست نيست. يعني اگه Stored Procedure A، پروسيجر B رو داخل خودش صدا زده باشه، خيلي مواقع در اسكريپتي كه گرفتم B قبل از A تعريف نشده! به همين دليل وقتي به اجراي A مي‌رسه مي‌گه كه B رو نمي‌شناسه و من مجبورم دستي B رو بردارم و بزارمش قبل A. متاسفانه از اين موارد خيلي زيادن.

Reza.ariyan
سه شنبه 26 آبان 1388, 11:51 صبح
پسر خوب این کار رو باید SQLSERVER انجام بده
فرض کن مثلا اول Functionها، بعد Viewها و ... انجام بشه
اگه تو Function از یک View یا Table استفاده کرده باشیم وقتی میخواهیم این اسکریپت رو Run کنیم خطای Ambiguous column name و ...میده و چون جدول یا ویو قبلا تعریف نشده که Function بتونه از اون استفاده کنه این خطا رو میده

مثال


-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE FUNCTION [dbo].[fn_SynchronizeColumn]
(
@ColumnsName_SplitedByComma NVARCHAR(MAX),
@TableName NVARCHAR(120)
)
RETURNS TABLE
AS RETURN
( SELECT [ID],[ColumnName]
FROM dbo.fn_GetColumns(@TableName)
INNER JOIN ( SELECT *
FROM dbo.fn_GetSplited(@ColumnsName_SplitedByComma)
) AS temp ON [Value] = [ColumnName]
)

من برای مثال این function اوردم قبل ازdbo.fn_GetColumns که خطای زیر رو داد
Ambiguous column name 'ID'.
ID تعریف نشده است - چون ID از نتیجه dbo.fn_GetColumns بدست میآد
خودت تست کن یه مثال از پروژه خودت

A.Nemati
سه شنبه 26 آبان 1388, 15:33 عصر
برگشتيم سر خونه اول. من كه از اول گفتم. مشكل همين جاست. يعني SQLServer اسكريپت درستي نمي‌گيره


هر وقت از اين ديتابيس اسكريپت كلي تهيه مي‌كنم، كلي خطا دارم كه فلان sp فلان view رو نمي‌شناسه و ... خلاصه هر دفعه كلي بايد وفت صرف كنم تا مرتبش كنم.

Reza.ariyan
سه شنبه 26 آبان 1388, 15:48 عصر
از چه ورژنی استفاده میکنی ؟
اگه از 2005 استفادا میکنی سرویس پک 3 رو نصب کن
اگه از 2008 استفاده میکنی سرویس پک 1
مشکلت حل میشه

یا توصیه : برای اسکریپت گرفتن از Database از SQLPakager استفاده کن
لینک دانلود http://freecomponents.blogfa.com/post-30.aspx
امکانات خیلی زیادی داره و تو Restore کردن هم نیازی به اجرای SQLSERVER Management Studio نداری