PDA

View Full Version : نام جدول متغییر ، فیلدها ثابت



سار
شنبه 28 مهر 1386, 15:48 عصر
حدود 15 تا جدول دارم که فقط نامهاشون با هم فرق می کنه.
البته ممکنه در طول زمان تعدادشون بیشتر هم بشه.
چطوری میتونم SP مشترکی بنویسم که نام جدول رو گیره و مقادیر و تو جدول داده شده درج یا ... بکنه.

البته ترجیح میدم چیزی شبیه به این نباشه مگر اینکه راه دیگری وجود نداشته باشه.


CREATE PROCEDURE spSaveFormGeneraorData
(@TableName varchar(50), @AnswerId nvarchar(max), @Value nvarchar(max))
AS
BEGIN
declare @query nvarchar(max)
set @query='insert into '+ @TableName +' (AnswerId,[Value]) Values ('''+ @AnswerId +''','''+ @Value +''')'
exec(@query)
END


در ضمن اینجا تبدیل نوع نشده Idها همشمون uniqueidentifier و مقادیر هم sql_variant

AminSobati
یک شنبه 29 مهر 1386, 10:02 صبح
دوست عزیزم،
برای متغیر بودن نام جدول، راهی به جز Dynamic TSQL یا همون چیزی که خودتون نوشتین وجود نداره.

سار
یک شنبه 29 مهر 1386, 15:15 عصر
چقدر بد، نمیدونم چرا از این روش خوشم نمیاد.
در هر حال تشکر از توجه شما.

rezaei manesh
سه شنبه 01 آبان 1386, 12:40 عصر
با عرض سلام و ادب
در کد این دوستمون دستور exec استفاده شده این برای زمانی هست که هر بار اطلاعات تغییر کنه و هر بار دوباره کویری ساخته می شه
اما دستور sp_executesql برای دانامیک کویری استفاده می شه و اگه این کویری قبلا باشه اونو دیگه نمی سازه
حالا بهتر نیست که از sp_executesql استفاده کنیم که هر موقع که نام جدول تغییر کرد یک کویری دیگه داشته باشیم و اگر نام جدول تغییر نکرد کویری جدیدی ساخته نشه و..
البته این دستور خیلی دقیق یعنی اگه یک space هم قبل یا بعد نام جدول قرار داده بشه کویری جدید می سازه و...
البته با توجه به این که مقادیر فیلد ها به صورت پارامتر هست.
نظر شما چی هست جناب استاد ثباتی؟ من این مطلب رو از نوشته های قبلی شما در این سایت برداشت کردم شاید برداشت من کامل نیست
اگه این طور هست لطفا کامل کنید.

AminSobati
سه شنبه 01 آبان 1386, 14:56 عصر
در مکانیزم کلی تغییری بوجود نمیاد و نهایتا راهکار اصلی همون Dynamic TSQL هست. اما اگر از جنبه های دیگه مثل Plan Cache Reuse به موضوع نگاه کنیم، فرمایش شما کاملا صحیحه