سلام
دوستان یک بانک اطلاعاتی داریم که حاوی 20 جدول است
اما داده های واردی در جداول برای ی و ک یکسان نمی باشد
حال من تابعی می خواهم که همه ی وک را یکسان کند
باید چه دستوری بنویسم
سلام
دوستان یک بانک اطلاعاتی داریم که حاوی 20 جدول است
اما داده های واردی در جداول برای ی و ک یکسان نمی باشد
حال من تابعی می خواهم که همه ی وک را یکسان کند
باید چه دستوری بنویسم
سلام
من تابع زیر رابدست اوردم
DECLARE @Table NVARCHAR(MAX),
@Col NVARCHAR(MAX)
DECLARE Table_Cursor CURSOR
FOR
--پيدا كردن تمام فيلدهاي متني تمام جداول ديتابيس جاري
SELECT a.name, --table
b.name --col
FROM sysobjects a,
syscolumns b
WHERE a.id = b.id
AND a.xtype = 'u' --User table
AND (
b.xtype = 99 --ntext
OR b.xtype = 35 -- text
OR b.xtype = 231 --nvarchar
OR b.xtype = 167 --varchar
OR b.xtype = 175 --char
OR b.xtype = 239 --nchar
)
OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @Table,@Col
WHILE (@@FETCH_STATUS = 0)
BEGIN
EXEC (
'update [' + @Table + '] set [' + @Col +
']= REPLACE(REPLACE(CAST([' + @Col +
'] as nvarchar(max)) , NCHAR(1610), NCHAR(1740)),NCHAR(1603),NCHAR(1705)) WHERE CHARINDEX(NCHAR(1603),[' + @Col + '])>0 OR CHARINDEX(NCHAR(1610),[' + @Col + '])>0'
)
PRINT 'Table: ' + @Table +' Col: '+ @Col;
FETCH NEXT FROM Table_Cursor INTO @Table,@Col
END CLOSE Table_Cursor DEALLOCATE Table_Cursor
اما مشکلی که دارم اینه این دستورات فقط برای جداولی که اسکما dbo داره درست کار میکنه
اما برای جداولی که اسکما dbo ندارند ارور زیر را میدهد
کد HTML:Msg 208, Level 16, State 1, Line 1 Invalid object name 'City'. Table: City Col: LatinName
کد را باید چگونه تغییر بدهم
اینطوری فک کنم درسته
DECLARE @Table NVARCHAR(MAX) ,
@Col NVARCHAR(MAX) ,
@schma nvarchar(max)
DECLARE Table_Cursor CURSOR
FOR
--پيدا كردن تمام فيلدهاي متني تمام جداول ديتابيس جاري
SELECT a.name, --table
b.name --col
,s.name
FROM sysobjects a,
syscolumns b
,sys.tables t,
sys.schemas s
WHERE a.id = b.id and t.object_id = a.id
and s.schema_id = t.schema_id
AND a.xtype = 'u' --User table
AND (
b.xtype = 99 --ntext
OR b.xtype = 35 -- text
OR b.xtype = 231 --nvarchar
OR b.xtype = 167 --varchar
OR b.xtype = 175 --char
OR b.xtype = 239 --nchar
)
OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @Table,@Col, @schma
WHILE (@@FETCH_STATUS = 0)
BEGIN
EXEC (
'update ['+ @schma +'].[' + @Table + '] set [' + @Col +
']= REPLACE(REPLACE(CAST([' + @Col +
'] as nvarchar(max)) , NCHAR(1610), NCHAR(1740)),NCHAR(1603),NCHAR(1705)) WHERE CHARINDEX(NCHAR(1603),[' + @Col +
'])>0 OR CHARINDEX(NCHAR(1610),[' + @Col + '])>0'
)
PRINT 'Table: ' + @Table +' Col: '+ @Col;
FETCH NEXT FROM Table_Cursor INTO @Table,@Col
END CLOSE Table_Cursor DEALLOCATE Table_Cursor
برای من هم این مشکل هست لطفا راهنمابی بفرمایید
سلام
باسپاس ازجوابتان
وقتی کد را اجرا میکنم ارور زیر را میدهد
Msg 16924, Level 16, State 1, Line 37
Cursorfetch: The number of variables declared in the INTO list must match that of selected columns.
این خطو تغییر بدین
FETCH NEXT FROM Table_Cursor INTO @Table,@Col , @schma
پروژه سی شارپ: اصلاح حروف "ک" و "ی" عربی توی همه جدولهای دیتابیس SQL با یک کلیک
توضیح :
با کلیک روی دکمه اصلاح حروف یک پروسیجر توی دیتابیس ایجاد میشه ، پروسیجر اجرا میشه و بعدش هم حذف میشه
با استفاده از این پروژه حروف عربی از قبیل "ک" و "ی" عربی (که با استاندارد فارسی فرق داره ) و توی جدولهای مختلف دیتابیس وارد شده و باعث ایجاد مشکل موقع جستجو در اطلاعات میشه به صورت اتوماتیک با حروف صحیح فارسی متناظر replace میشه .
فقط باید توی کلاس clsAccessData توی خط اول ( رشته ConStr ) رشته اتصال خودتون رو جایگزین کنید.
string ConStr = @"Data Source=.\InstanceName; database = DataBaseName ; Integrated Security=True";
از دات نت بار 2 هم استفاده شده که dll اون توی مسیر bin توی پروژه هست و توی پروژه های خودتون باید به رفرنسهاتون اضافه بشه.
لینک دانلود پروژه
برای اس کیو ال هم میتونید از این استور پروسیجر که آقای یوسف زالی عزیز تهیه کردند استفاده کنید. (توی این لینک)
این امتحان کنید!سلام
اگر بخواهم برای یک جدول خاص اینکار را انجام بدهم باید چه کدی بنویسم
DECLARE @Table NVARCHAR(MAX) ,
@Col NVARCHAR(MAX) ,
@schma nvarchar(max)
@Table = "youTable"
@Col = "columnName"
@schma = "dbo"
EXEC (
'update ['+ @schma +'].[' + @Table + '] set [' + @Col +
']= REPLACE(REPLACE(CAST([' + @Col +
'] as nvarchar(max)) , NCHAR(1610), NCHAR(1740)),NCHAR(1603),NCHAR(1705)) WHERE CHARINDEX(NCHAR(1603),[' + @Col +
'])>0 OR CHARINDEX(NCHAR(1610),[' + @Col + '])>0'
)