ورود

View Full Version : ایجاد جدول با نام پارامتر دار



mina1363
دوشنبه 23 شهریور 1388, 11:36 صبح
سلام دوستان
میخوام با کدنویسی یه جدول ایجاد کنم که کد آن به شکل زیر است:


CREATE TABLE [Tafzili+@TblName]
(
TafCode nvarchar(50) NOT NULL,
TafName nvarchar(50) NOT NULL,
MoeCode nvarchar(50) NOT NULL,
OfficeID int NOT NULL
PRIMARY KEY CLUSTERED([TafCode],[MoeCode])
WITH(IGNORE_DUP_KEY = OFF)
)

همونطور که از کد پیداست میخوام جدولم علاوه بر نام tafzili مقدار پارامتر @TblName رو هم داشته باشه ولی وقتی که جدول ایجاد میشه نام آن برابر است با: Tafzili+@TblName مقدار پارامتر رو نمیگیره باید چه تغییری در کدم ایجاد کنم که نام جدولی که ایجاد میشه باشه Tafzili + مقدار پارامتر @TblName ؟

محمد سلیم آبادی
دوشنبه 23 شهریور 1388, 13:41 عصر
با استفاده از دستور execute() این کار امکان پذیر است (Dynamic SQL)
یک مثال در تاپیک زیر وجود دارد. یا می توانید با جستجو به جوابتان برسید.
http://www.barnamenevis.org/forum/showthread.php?t=178939

mina1363
سه شنبه 24 شهریور 1388, 08:42 صبح
سلام ممنونم این مشکل ایجاد جدول رو حل کرد حالا میخوام به این جدول مقادیری رو اضافه کنم کدش به صورت زیر است ولی جواب نمیده چه تغییری باید در کد ایجاد کنم تا درست بشه؟


@TblName nvarchar(50),
@mocode nvarchar(50),
@name nvarchar(50),
@kolcode nvarchar(50),
@office int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @command nvarchar(4000)
set @command=
'insert into Moein_'+@TblName+
' values('+@mocode+', '+@name+', '+@kolcode+', '+@office+')'
EXEC(@command)
END

ASKaffash
سه شنبه 24 شهریور 1388, 09:44 صبح
سلام
اگر محتوای name , mocode , kolcode عددی است ولی رشته ای ذخیره میشود این روش صحیح است ولی برا office باید تبدیل شود :
Convert(varchar(20), @office)

محمد سلیم آبادی
سه شنبه 24 شهریور 1388, 10:24 صبح
وقتی که می خواهیم از مقادیر رشته استفاده کنیم همیشه از نقل قول نیز استفاده می کنیم.
باید از تابع نقل قول استفاده کنید.


declare @a char(1) set @a='a'
print @a
print Quotename(@a,'''')

mina1363
چهارشنبه 25 شهریور 1388, 12:23 عصر
سلام دوستان
این query رو چه تغییری بدم که نام ستون Total قابل شناخت باشه؟


@TblName nvarchar(50),
@office int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @command nvarchar(4000)
set @command=
'select MAX(DocNum) as ''''Total'''' from Document_'+@TblName+ ' where OfficeID= '+''''+convert(nvarchar(50), @office)+''''
END

یعنی وقتی این رو اجرا میکنم اصلا انگار اونو نمیخونه و مدام چاپ میکنه Return Value =0 در حالی که 0 نیست و در دیتا بیس مقدار دارم و وقتی که این query رو بدون حالت command اجرا میکنم جواب درست رو برمیگردونه اشکال کارم کجاست؟
ممنونم

محمد سلیم آبادی
چهارشنبه 25 شهریور 1388, 12:37 عصر
as '+''''+'Total'+''''+' from

mina1363
چهارشنبه 25 شهریور 1388, 13:52 عصر
ولی باز هم مقدار صهر رو برمیگردونه؟؟؟؟؟

mina1363
چهارشنبه 25 شهریور 1388, 14:24 عصر
دوست عزیز دیگه راهکاری سراغ ندارید که بهم کمک کنه؟ خواهش میکنم خیلی عجله دارم!!!!!

محمد سلیم آبادی
چهارشنبه 25 شهریور 1388, 14:24 عصر
مگه ستون OfficeID از نوع داده ی INT نیست؟
اگر اینطور است پس چرا سعی می کنید که از نقل قول برای این مقدار استفاده کنید.




+' where OfficeID= '+convert(nvarchar(50), @office)
instead of:
+' where OfficeID= '+''''+convert(nvarchar(50), @office)+''''


شایدم هم پارامتر @office مقدار دهی نمی شود در نتیجه مقدار آن null خواهد بود و وقتی که null با یک مقدار رشته ای جمع شود چیزی بدست نمی آید. یعنی مقدار متغیر Command آن چیزی نخواهد بود که انتظار دارید.

mina1363
چهارشنبه 25 شهریور 1388, 14:37 عصر
نه به اون هم ربطی نداره الآن تستش کردم باز هم جواب صفر میده آخه بدون حالت نقل قول کلا درست جواب میده حالا که به صورت نقل قول تغییرش دادم داره جواب صفر برمیگردونه به نظرم هر چی هست به خاطر ستون Total است که درست به حالت نقل قول تبدیل نشده البته این نظر من است نمیدونم شما استادید

mina1363
چهارشنبه 25 شهریور 1388, 15:28 عصر
این مسئله هم هنوز حل نشده