PDA

View Full Version : قبول نکردن اسمTableدریک متغیردردستورupdateببیند



xxxxxxxxxx
پنج شنبه 28 تیر 1386, 00:11 صبح
سلام یک سری دستور نوشتم که بگردد تمام جداول راکه userساخته (دریک databaseمشخص)یکی یکی بالا بیاوردوقراردهددرمتغیروبرا ی هرجدول نیز حلقه ای که یکی یکی فیلدهارا بالا بیاورد ودریک متغیر بریزد که چی ؟ که با دستور update بک کاراکتر مثل "ک"را جایگزین یک کاراکتر دیگر بکند.
مشکل اینجاست دردستور update اسم جدول رادرمتغیر قبول نمی کندولی بطور مستقیم قبول میکند.درضمن تازه کار هستم ونیز در Query Analyzer این کار رامیخواه انجام دهم .پیشاپیش متشکرم




USE temp02
GO
DECLARE @name_t varchar(25), @name_f varchar(25)
--DECLARE @nt int,@nf int
DECLARE Name_T
CURSOR FOR SELECT [name] FROM [Montasabin].[dbo].[sysobjects] where xtype='U' ORDER BY [name]
--SELECT [name] from syscolumns where type_name(xusertype)<>'int' and object_name(id)=@name_t
--set @nt =0
--set @nf =0
OPEN Name_T

-- اجرای اولین فیچ وقراردادن آن دریک متغیر
FETCH NEXT FROM Name_T INTO @name_t
--set @nt =1
-- کنترل تعداد فیچهای باقیمانده برای پایان دادن به حلقه
WHILE @@FETCH_STATUS = 0
BEGIN


DECLARE Name_F CURSOR FOR
SELECT [name] from syscolumns where type_name(xusertype)<>'int' and object_name(id)=@name_t
OPEN Name_F
FETCH NEXT FROM Name_F INTO @name_f
-- set @nf =1
WHILE @@FETCH_STATUS = 0
BEGIN
--select @@CURSOR_ROWS
UPDATE @name_t SET @name_f = replace (@name_f,'ک','ک')
--
-- PRINT 'نام فیلد '+str(@nt,2)+str(@nf,3)+ @name_t+'.'+@name_f
-- FETCH NEXT FROM Name_F INTO @name_f
-- set @nf =@nf+1
END
FETCH NEXT FROM Name_F INTO @name_f
-- set @nt =@nt+1
CLOSE Name_F
DEALLOCATE Name_F
-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM Name_T INTO @name_t
END
CLOSE Name_T
DEALLOCATE Name_T
GO

mehdi.mousavi
پنج شنبه 28 تیر 1386, 10:13 صبح
[quote=xxxxxxxxxx;367013]سلام یک سری دستور نوشتم که بگردد تمام جداول راکه userساخته (دریک databaseمشخص)یکی یکی بالا بیاوردوقراردهددرمتغیروبرا ی هرجدول نیز حلقه ای که یکی یکی فیلدهارا بالا بیاورد ودریک متغیر بریزد که چی ؟ که با دستور update بک کاراکتر مثل "ک"را جایگزین یک کاراکتر دیگر بکند.
مشکل اینجاست دردستور update اسم جدول رادرمتغیر قبول نمی کندولی بطور مستقیم قبول میکند.درضمن تازه کار هستم ونیز در Query Analyzer این کار رامیخواه انجام دهم .پیشاپیش متشکرم

سلام.
البته که SQL Statement زیر کار نخواهد کرد:


SELECT * FROM @tableName
چون SQL Server نمیتونه @tableName رو Resolve کنه. برای اینکار، باید از Dynamic SQL ها استفاده کنید (البته، حواستون به ایرادهای امنیتی این روش باید باشه). ابتدا یه متغیر تعریف می کنید و SQL مربوطه رو بصورت String در اون قرار میدید. سپس با استفاده از دستور EXEC اونو اجرا می کنید:


DECLARE @tableName varchar(128);
DECLARE @sql varchar(4000);
SELECT @sql = 'SELECT * FROM [' + @tableName + ']';
EXEC @sql;

xxxxxxxxxx
پنج شنبه 28 تیر 1386, 18:53 عصر
قبول نکرد پیغام دادکه:
Could not find stored procedure'SELECT * FROM [' + @tableName + ']' x

mehdi.mousavi
پنج شنبه 28 تیر 1386, 19:13 عصر
قبول نکرد پیغام دادکه:
Could not find stored procedure'SELECT * FROM [' + @tableName + ']' x



سلام.
ببخشید! جای EXEC @sql بنویسید: EXEC sp_executesql @sql