View Full Version : ارسال اسم جدول به عنوان پارامتر به Sp
farzaneh.sh
چهارشنبه 13 خرداد 1388, 15:15 عصر
ّبا سلام من یک stored Procedure دارم که اسم جدول و یک متغیر به عنوان پارامتر به آن ارسال میکنم به صورت زیر
ALTER Proc [dbo].[Select_Path_New]
@table_name varchar(50),
@Name nvarchar(max)
as
Declare @Sql_Code Varchar(300)
set @Sql_Code = N'SELECT * FROM ' + @table_name + ' WHERE Name = ''' + @Name + ''''
exec(@Sql_Code)
sp درست هست و ایجاد میشه و وقتی اسم جدول و متغیر Name را برای آن ارسال میکنم اگه متغیر Name به صورت انگلیسی باشه خروجی درست میدهد ولی اگر متغیر Name به صورت یک رشته حروف فارسی باشد چیزی به عنوان خروجی نمی دهد...
به نظر دوستان مشکل از کجاست؟
Elham_gh
چهارشنبه 13 خرداد 1388, 16:41 عصر
اسم فارسی باید داخل [] باشد.
پس شما کلا اسمو بذارین داخل [] که چه انگلیسی, چه فارسی درست بشه
masoud.ramezani
چهارشنبه 13 خرداد 1388, 19:28 عصر
سلام
مشکله coding است. اگر unicode باشد نباید مشکلی داشته باشید.
farzaneh.sh
جمعه 15 خرداد 1388, 00:34 صبح
اسم فارسی باید داخل [] باشد.
پس شما کلا اسمو بذارین داخل [] که چه انگلیسی, چه فارسی درست بشه
با سلام...
ممنونم از راه حل شما ولی متاسفانه به جوابی نرسیدم
ASKaffash
شنبه 16 خرداد 1388, 08:40 صبح
سلام
این خط را با خط معادلش عوض کنید:
Set @Sql_Code = N'Select * From '+@table_name+' Where Name=N'+Char(39)+@Name+Char(39)
farzaneh.sh
شنبه 16 خرداد 1388, 10:16 صبح
با سلام...کاربر ASKaffash ...ممنونم از پاسخ شما ....ولی متاسفانه باز هم مشکل حل نشد...
ASKaffash
شنبه 16 خرداد 1388, 10:24 صبح
سلام
حرف ی که درون رشته Name وجود ندارد ؟ بنظرم دستور ارسالی را نیز قرار دهید
حامد مصافی
شنبه 16 خرداد 1388, 11:04 صبح
Declare @Sql_Code nvarchar(300)
farzaneh.sh
سه شنبه 19 خرداد 1388, 11:26 صبح
Declare @Sql_Code nvarchar(300)
با سلام ..ممنونم که توجه نشان دادید و پاسخ ارسال کردید.
ولی متاسفانه باز هم درست نشد...
و مشکل از حرف ی هم نیست..چک کردم...
حامد مصافی
سه شنبه 19 خرداد 1388, 11:39 صبح
من فراموش کردم بگم، اما امیدوارم شما @table_name را هم تبدیل به nvarchar کرده باشید.
farzaneh.sh
سه شنبه 19 خرداد 1388, 15:33 عصر
من فراموش کردم بگم، اما امیدوارم شما @table_name را هم تبدیل به nvarchar کرده باشید.
با سلام..@table_name را هم nvarchar کرده ام ولی باز هم جواب نگرفتم..
حامد مصافی
سه شنبه 19 خرداد 1388, 17:09 عصر
لطفاً این کد را امتحان کرده و در صورت دریافت خطا، پیغام مربوطه را اینجا بنویسید.
ALTER Proc [dbo].[Select_Path_New]
@Table_Name nvarchar(50),
@Name nvarchar(max)
AS
DECLARE @Sql_Code nvarchar(300)
SET @Sql_Code = N'SELECT * FROM [' + Table_Name + '] WHERE Name = ''' + @Name + ''''
EXEC(@Sql_Code)
farzaneh.sh
سه شنبه 19 خرداد 1388, 19:08 عصر
لطفاً این کد را امتحان کرده و در صورت دریافت خطا، پیغام مربوطه را اینجا بنویسید.
ALTER Proc [dbo].[Select_Path_New]
@Table_Name nvarchar(50),
@Name nvarchar(max)
AS
DECLARE @Sql_Code nvarchar(300)
SET @Sql_Code = N'SELECT * FROM [' + Table_Name + '] WHERE Name = ''' + @Name + ''''
EXEC(@Sql_Code)
با سلام..ممنونم که راهنمایی میکنید...
فکر کنم منظورتون از Table_Name که آورده اید Table_Name@ باشد...
در هر دو صورت پیغام خطا می دهد
اگر در دستور select , من Table_Name را بنویسم پیغام خطای
Invalid column name 'Table_Name'.
را می دهد.
و اگر در دستور Select , من Table_Name@ را بنویسم Stored Procedure ایجاد می شود.
ولی در هنگام اجرای آن خطای
Incorrect syntax near '='.
می دهد.
حامد مصافی
سه شنبه 19 خرداد 1388, 19:46 عصر
با سلام..ممنونم که راهنمایی میکنید...
فکر کنم منظورتون از Table_Name که آورده اید Table_Name@ باشد...
بله منظورم همان بود.
در Tablle_Name به جای ستون Name از نام دیگری استفاده کنید. Name یک کلمه کلیدی در Sql است.
farzaneh.sh
سه شنبه 19 خرداد 1388, 21:06 عصر
بله منظورم همان بود.
در Tablle_Name به جای ستون Name از نام دیگری استفاده کنید. Name یک کلمه کلیدی در Sql است.
با سلام..ممنونم از راهنماییتون....
ولی متاسفانه به جواب نرسید
adinochestva
سه شنبه 19 خرداد 1388, 21:16 عصر
این را امتحان کنید :
alter Proc [dbo].[Select_Path_New]
@Table_Name nvarchar(50),
@Name nvarchar(200)
AS
DECLARE @Sql_Code nvarchar(300)
SET @Sql_Code = N'SELECT * FROM [' + @Table_Name + '] WHERE Name = ' + @Name
EXEC(@Sql_Code)
farzaneh.sh
چهارشنبه 20 خرداد 1388, 12:11 عصر
این را امتحان کنید :
alter Proc [dbo].[Select_Path_New]
@Table_Name nvarchar(50),
@Name nvarchar(200)
AS
DECLARE @Sql_Code nvarchar(300)
SET @Sql_Code = N'SELECT * FROM [' + @Table_Name + '] WHERE Name = ' + @Name
EXEC(@Sql_Code)
با سلام....ممنونم از توجه شما ..بازهم به جواب نرسید......:ناراحت:
حامد مصافی
چهارشنبه 20 خرداد 1388, 12:33 عصر
کد اصلاح شده (چیزی که الان استفاده می کنید) را درج کنید لطفاً.
farzaneh.sh
چهارشنبه 20 خرداد 1388, 13:03 عصر
باسلام....و ممنون از توجه شما دوستان
من دو کد زیر را چک کردم و هنوز به جواب نریسده ام
ALTER Proc [dbo].[Select_Path_New]
@Table_Name nvarchar(50),
@Name nvarchar(200)
AS
DECLARE @Sql_Code nvarchar(300)
SET @Sql_Code = N'SELECT * FROM [' + @Table_Name + '] WHERE Name= ''' + @Name + ''''
EXEC(@Sql_Code)
که این کد در هنگام اجرا خطایی نمی گیرد ولی چیزی هم به عنوان خروجی بر نمی گرداند
و همچنین کد زیر
ALTER Proc [dbo].[Select_Path_New]
@Table_Name nvarchar(50),
@Name nvarchar(200)
AS
DECLARE @Sql_Code nvarchar(300)
SET @Sql_Code = N'SELECT * FROM [' + @Table_Name + '] WHERE Name= ' + @Name
EXEC(@Sql_Code)
که این کد در هنگام اجرا یک خطا میگیرد
البته من در هنگام اجرا ورودی
@Name = N'تست' قرار دادم که این خطا را بر گرداند
Invalid column name 'تست'.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.