PDA

View Full Version : صدا زدن یک sp



sadaf_
پنج شنبه 20 بهمن 1390, 10:35 صبح
من یک sp دارم به اسم Book
حالا در یک sp دیگر می خوام book را فراخوانی کنم
با چه دستوری ؟
آیا

exec (Book)


و چطوری می تونم بعد از صدا زدن book عمل فیلتر را انجام بدم ؟

بهزادصادقی
پنج شنبه 20 بهمن 1390, 10:48 صبح
فکر کنم لازم است پرانتزها را بردارید:

exec Book

ولی بعد از اجرای این اس پی، دسترسی مستقیم به نتایج آن را ندارید که بتوانید فیلترش کنید. نمی توانید توی خود اس پی عملیات فیلتر را انچام دهید؟

sadaf_
پنج شنبه 20 بهمن 1390, 10:51 صبح
من این sp رو باید خیلی جاها استفاده کنم
و در هر جایی فیلتر مختص خودش رو داره
برای همین بهتره وقتی صدا می زنم فیلتر هم انجام بدم

Galawij
پنج شنبه 20 بهمن 1390, 10:51 صبح
روش اول:
SELECT * FROM OPENQUERY ([DELLSTAR\SQL2008],
'EXECUTE [AdventureWorks2008].[dbo].[uspGetBillOfMaterials] 800, ''2004-01-01''')
روش دوم:
CREATE TABLE #tmpBus
(
COL1 INT,
COL2 INT
)
INSERT INTO #tmpBus
Exec SpGetRecords 'Params'

sadaf_
پنج شنبه 20 بهمن 1390, 11:05 صبح
روش اول:
SELECT * FROM OPENQUERY ([DELLSTAR\SQL2008],
'EXECUTE [AdventureWorks2008].[dbo].[uspGetBillOfMaterials] 800, ''2004-01-01''')
روش دوم:
CREATE TABLE #tmpBus
(
COL1 INT,
COL2 INT
)
INSERT INTO #tmpBus
Exec SpGetRecords 'Params'

می شه لطف کنین در مورد این ها یه توضیحی بدین
من sql2005 دارم
فیلتر sp کجای این دستورات
ممنون

بهزادصادقی
پنج شنبه 20 بهمن 1390, 11:14 صبح
من این sp رو باید خیلی جاها استفاده کنم
و در هر جایی فیلتر مختص خودش رو داره
برای همین بهتره وقتی صدا می زنم فیلتر هم انجام بدم

علاوه بر دو روشی که دوست گرامی Galawij به آن اشاره کردند - که شما را محبور می‌کند فیلتر را به طور غیر مستقیم بعد از انجام اس پی خود اعمال نمائید - یک راه دیگر هم وجود دارد که امکان دارد شما بتوانید از آن استفاده نمائید و بتواندی به صورت مستقیم روی نتایج query خود فیلتر بگذارید. ولی آن راه ملزم این است که شما اس پی خود را تبدیل کنید به یک user-defined function. اگر کد اس پی خود را اینجا درج کنید، می‌شود دید که این تبدیل ممکن می‌باشد یا نه. چون user-defined function ها محدودیت هایی دارند، و هر اس پی ای را نمی توان به آنها تبدیل کرد.

اگر این تبدیل امکان پذیر باشد، شما می‌توانید چنین کاری کنید:

select * from Book() where ...

یوسف زالی
پنج شنبه 20 بهمن 1390, 11:18 صبح
سلام.
راه دیگری هم وجود داره و اینه که خود اس پی رو تغییر بدید تا پارامتر اضافی از نوع varchar بپذیره و در اون فیلتر هاتون رو بریزید و در اس پی با دستورات داینامیک محدودیت ایجاد کنید.

Arash_janusV3
پنج شنبه 20 بهمن 1390, 11:22 صبح
این روش هم می شه

DECLARE @foo TABLE
(
SRV_NAME NVARCHAR(100),
SRV_PROVIDERNAME NVARCHAR(100),
SRV_PRODUCT NVARCHAR(100),
SRV_DATASOURCE NVARCHAR(100),
SRV_PROVIDERSTRING NVARCHAR(100),
SRV_LOCATION NVARCHAR(100),
SRV_CAT NVARCHAR(100)
)

INSERT INTO @foo
EXEC sp_linkedservers

SELECT * FROM @foo WHERE SRV_PRODUCT = 'SQL Server'

sadaf_
پنج شنبه 20 بهمن 1390, 12:02 عصر
این روش هم می شه

DECLARE @foo TABLE
(
SRV_NAME NVARCHAR(100),
SRV_PROVIDERNAME NVARCHAR(100),
SRV_PRODUCT NVARCHAR(100),
SRV_DATASOURCE NVARCHAR(100),
SRV_PROVIDERSTRING NVARCHAR(100),
SRV_LOCATION NVARCHAR(100),
SRV_CAT NVARCHAR(100)
)

INSERT INTO @foo
EXEC sp_linkedservers

SELECT * FROM @foo WHERE SRV_PRODUCT = 'SQL Server'




این روش به من جواب داد اما سرعت پایینه

Galawij
پنج شنبه 20 بهمن 1390, 12:31 عصر
این روش به من جواب داد اما سرعت پایینه
استفاده از جداول موقت و توابع روی سرعت تأثیر می ذارند.
در توضیح روش اول:
شما اول یک Linked Server روی بانکتون درست می کنید. به عنوان مثال:
EXEC master.dbo.sp_addlinkedserver @server = N'localhost',@srvproduct=N'SQL Server'
و بعد از این لینک سرور برای اتصال و اجرای روال مورد نظرتون استفاده می کنید و هر نوع شرطی را نیز اعمال کنید. مثال:
SELECT * FROM OPENQUERY(localhost,'exec sp_who') WHERE spid IN(1,2,3,4)

sadaf_
پنج شنبه 20 بهمن 1390, 13:15 عصر
استفاده از جداول موقت و توابع روی سرعت تأثیر می ذارند.
در توضیح روش اول:
شما اول یک Linked Server روی بانکتون درست می کنید. به عنوان مثال:
EXEC master.dbo.sp_addlinkedserver @server = N'localhost',@srvproduct=N'SQL Server'
و بعد از این لینک سرور برای اتصال و اجرای روال مورد نظرتون استفاده می کنید و هر نوع شرطی را نیز اعمال کنید. مثال:
SELECT * FROM OPENQUERY(localhost,'exec sp_who') WHERE spid IN(1,2,3,4)
با تشکر از توضیحتون

اما sp من دارای هیچ پارامتری نیست اون رو باید چکار کرد؟
این مثال شما برای sp ی که پارامتر داره جوابگوست
درسته؟