PDA

View Full Version : اجرا کردن دستوری به صورت رشته با فرمان exec و برگرداندن خروجی



fa_karoon
یک شنبه 04 اردیبهشت 1390, 17:47 عصر
سلام لطفا راهنمایی کنید چگونه می توانم یک دستور Select را که به صورت رشته است با دستور exec اجرا کنم و خروجی بگیرم مانند کد زیر:


Declare @Param as nvarchar
Set @param='Ware'
Exec sp-executsql 'Select ID From' + @Param

می خواهم وقتی این دستورات را درون یک Function نوشتم هنگامی که آن را صدا می زنم خروجی فیلد ID جدول Ware باشد
فعلا که وقتی دستور exec را در تابع می نویسم و بعد تابع را صدا می زنم خطا می دهد که نمی تواند این کار را انجام دهد لطفا راهنمایی کنید

m_omrani
یک شنبه 04 اردیبهشت 1390, 19:44 عصر
فکر کنم مشکلش یک Space باشد. بعد از الحاق پارامتر @Param کلمه From به Ware می چسبد.

حمیدرضاصادقیان
دوشنبه 05 اردیبهشت 1390, 07:36 صبح
سلام.
به جز موردی که آقای عمرانی فرمودند باید پیغام خطا رو اینجا قرار بدید تا بشه دقیق راهنمایی کرد.
الان دستور sp_executesql شما هم اشتباه است.چون به جای '_' از '-' استفاده کردید.

Galawij
دوشنبه 05 اردیبهشت 1390, 08:33 صبح
سلام دوست من
شما اگه اسم جدولتون مشخصه که دیگه متغیر نمی خواهد، ولی اگر بخواهید اسم جدول را به عنوان پارامتر ورودی ارسال کنید به این صورت عمل کنید:

CREATE PROCEDURE [dbo].[YourSPName](@TabelName NVARCHAR(128))
AS
BEGIN
DECLARE @SelectString NVARCHAR(MAX)
Set @SelectString='SELECT * FROM '+ @TabelName)
EXEC (@SelectString) / EXECUTE SP_EXECUTESQL @SelectString
END

ASKaffash
دوشنبه 05 اردیبهشت 1390, 08:59 صبح
سلام
درون Function نمی توان Dynamic SQL بکار برد

محمد سلیم آبادی
دوشنبه 05 اردیبهشت 1390, 20:18 عصر
اگر تعداد جداولی که ممکنه به عنوان متغیر گرفته بشن خیلی محدود باشه می تونید از Dynamic بودن کوئری صرف نظر کنید. به این شکل:

SELECT ID FROM
(SELECT ID, 'Ware' AS TableName FROM Ware
UNION
SELECT ID, 'Others' FROM Other) AS D
WHERE TableName = @parm;

fa_karoon
چهارشنبه 07 اردیبهشت 1390, 16:26 عصر
سلام از جواب همه دوستان ممنون حق با جناب askaffash بود جواب اصلی رو پیدا کردم سر فرصت می ذارم دوستان استفاده کنند