ورود

View Full Version : سوال: استفاده از stored procedure در یک View



hsalimi
شنبه 04 اردیبهشت 1389, 13:34 عصر
سلام
من یک stored procedure با چند پارامتر دارم که نتیجه اجرای آن یک جدول است .
حال می خواهم این stored procedure را در یک View استفاده کنم. چگونه می تونم اینکار را انجام بدهم. لطفا راهنمایی کنید.
در ضمن این stored procedure من، encription میباشد .

محمد سلیم آبادی
شنبه 04 اردیبهشت 1389, 23:24 عصر
سلام
من یک stored procedure با چند پارامتر دارم که نتیجه اجرای آن یک جدول است .
حال می خواهم این stored procedure را در یک View استفاده کنم. چگونه می تونم اینکار را انجام بدهم. لطفا راهنمایی کنید.
در ضمن این stored procedure من، encription میباشد .

سلام،
امکان استفاده از sp در view وجود نداره. view تنها یک شی ای هست که می تونه یک دستور select و یا cte رو در خودش نگهداری کنه.

hsalimi
پنج شنبه 09 اردیبهشت 1389, 09:04 صبح
سلام ، خوب آیا می تونیم خروجی Stored procedure را در یک جدول موقت ریخته و جدول را در view استفاده کنیم. این جدول هم خودش ایجاد بشه و احتیاج به ایجاد کردنش نباشد.

با تشکر

محمد سلیم آبادی
شنبه 11 اردیبهشت 1389, 13:40 عصر
سلام ، خوب آیا می تونیم خروجی Stored procedure را در یک جدول موقت ریخته و جدول را در view استفاده کنیم. این جدول هم خودش ایجاد بشه و احتیاج به ایجاد کردنش نباشد.


با تشکر


سلام،
هر نرم افزار RDBMS ای قواعد دستوری خاص خودش را دارد. شما اگر این سوال را در تالار SQL Server مطرح می کردید من در جواب به این سوال "آیا می توانیم خروجی SP را در یک جدول موقت بریزیم؟" می گفتم بله می شود. با این syntax
INSERT INTO #temporary_table EXECUTE your_proceduer

ولی اینکه آیا می شود View ای ایجاد کرد که بر اساس یک جدول موقت باشد فکر نمی کنم این امکان وجود داشته باشد.

اگر از دستور SELECT INTO استفاده کنید می توانید یک جدول دیگری بر اساس جدول مورد نظر ایجاد کنید که دقیقا شامل همان ساختار باشد.
SELECT * INTO #temporary_table FROM your_table_name_here WHERE 1=2

hsalimi
یک شنبه 12 اردیبهشت 1389, 13:10 عصر
با تشکر از جنابعالی
من دستورات شما را استفاده کردم اما جدول موقت نمی سازه ، وپیغام خطا میدهد.
Invalid object name '#temporary_table'.

لابد باید تو تنظیمات sql server تغییراتی بدهم ، یا باید برای جدول موقت اسمی انتخاب کنم و از قبل فیلد هاش را تعریف کنم. اینطور نیست؟ واگر جدول موقت را ساخت کجا باید پیدا یش کنم؟.

محمد سلیم آبادی
یک شنبه 12 اردیبهشت 1389, 14:21 عصر
چه دستوری را ایجاد کردین که این پیغام داده شد؟ SELECT گرفتین بعد از SELECT INTO ؟
چداول موقت همگی در بانک tempdb ذخیره میشن در پوشه ی temprary tables .

حالا اینبار قبل از SELECT گرفتن از داده های جدول دستور USE tempdb هم بنویسید.

hsalimi
دوشنبه 13 اردیبهشت 1389, 13:02 عصر
من دستور زیر را اجرا کردم:

INSERT INTO #temporary_table EXECUTE SPamarhales

پیغام خطا بالا را داد. بعد یک جدول یر اساس خروجی stored procedure ایجاد کردم و دستور زیر را اجرا کردم .جواب داد:

INSERT INTO myTable EXECUTE SPamarhales

و دستور زیر را که اجرا کردم:

SELECT * INTO #temporary_table FROM table1

جدول موقت را در دیتابیس مربوطه ساخت .
حال بنظر شما چرا دستور اولی جدول موقت ایجاد نمی کنه؟
راستی این جدول موقت تا کی میمونه و چطور می تونیم حذفش کنیم؟

محمد سلیم آبادی
دوشنبه 13 اردیبهشت 1389, 15:02 عصر
در دستور اول پیغام invalid object name داده میشه به این دلیل که اون جدول وقت وجود خارجی نداره که به خواهیم داخلش سطرهایی را درج کنیم.
دستور SELECT INTO ابتدا یک جدول ایجاد می کند سپس نتیجه ی SELECT را داخل آن جدول درج می کند. یعنی نباید قبلا جدولی با آن نام وجود داشته باشد، چون نمی توانیم دو جدول با یک نام ایجاد کنیم.

پس ابتدا باید جدول موقت ایجاد شود سپس از INSERT INTO #temp EXEC استفاده کنید.

جداول موقت را مثل جداول دیگه میشه حذف کرد یعنی با DROP.
راجب طول حیات این جداول من مطالب Book Online را جالب دیدم:



There are two types of temporary tables: local and global. Local temporary tables are visible only to their creators during the same connection to an instance of SQL Server as when the tables were first created or referenced. Local temporary tables are deleted after the user disconnects from the instance of SQL Server. Global temporary tables are visible to any user and any connection after they are created, and are deleted when all users that are referencing the table disconnect from the instance of SQL Server.


بستگی داره از چه نوع temp ای استفاده کرده باشین اگر local باشه زمانی جدول حذف میشه که کاربری که آن را ایجاد کرده یا استفاده می کرده از اسکیول Disconect بشه.