it-swarm.asia

كيفية تغيير ترتيب SQL Server

كيف يمكنني تغيير ترتيب النسخ الافتراضي لـ SQL Server 2008 R2 للخادم بأكمله وقاعدة بيانات معينة؟

هل هناك طريقة للقيام بذلك باستخدام واجهة مرئية من SQL Server Management Studio؟ في نافذة خصائص الخادم (وفي نافذة خصائص قاعدة البيانات المقابلة) ، هذه الخاصية غير متاحة للتحرير.

27
rem

نعم.

يمكنك تغيير الترتيب الافتراضي لمثيل SQL Server 2008 R2 السريع وقواعد البيانات الفردية ، ولكنها مهمة معقدة.

للأسف ، لا يوجد خيار مرئي للقيام بذلك عبر SSMS.

يدعم SQL Server 2008 إعداد النسخ على المستويات التالية:

  • الخادم

  • قاعدة البيانات

  • عمود

  • التعبير

يتم تحديد إعدادات التثبيت الافتراضية حسب الإعدادات المحلية لنظام Windows. يمكن تغيير الترتيب على مستوى الخادم أثناء الإعداد ، أو بتغيير الإعدادات المحلية لنظام Windows قبل التثبيت. المزيد ...

إعداد وتغيير ترتيب الخادم - SQL Server 2008

  • تأكد من أن لديك جميع المعلومات أو النصوص البرمجية اللازمة لإعادة إنشاء قواعد بيانات المستخدم الخاصة بك وجميع الكائنات الموجودة فيها.

  • قم بتصدير جميع بياناتك باستخدام أداة مثل أداة bcp Utility. لمزيد من المعلومات ، راجع استيراد وتصدير البيانات المجمعة.

  • إسقاط جميع قواعد بيانات المستخدم.

  • إعادة بناء قاعدة البيانات الرئيسية تحديد الترتيب الجديد في خاصية SQLCOLLATION لأمر الإعداد

  • إنشاء جميع قواعد البيانات وجميع الكائنات فيها.

  • استيراد جميع البيانات الخاصة بك.

إعداد وتغيير ترتيب قاعدة البيانات - SQL Server 2008

  • قم بتعيين الخيار COLLATION في CREATE DATABASE العبارة أثناء إنشاء قاعدة بيانات جديدة.
  • وبالمثل ، قم بتعيين خيارات COLLATION في ALTER DATABASE عبارة لتغيير ترتيب قاعدة البيانات الموجودة.

    ALTER DATABASE [database_name] COLLATE SQL_Latin1_General_CP1_CI_AS;

إعداد وتغيير ترتيب العمود

  • ستبقى بعض عمليات ترتيب الأعمدة كما هي حتى بعد تعديل ترتيب قاعدة البيانات. في هذه الحالة ، يجب عليك تعديل ترتيب الأعمدة الفردية.
25
CoderHawk

تأكد من أنك تريد حقًا "إسقاط" قواعد بيانات المستخدم كما هو موضح في الإجابة أعلاه. قد ترغب فقط في "فصل" قواعد البيانات. أو في الواقع ، لا يمكنك فعل أي شيء لأن إعادة بناء المعلم تزيل بشكل فعال أي روابط إلى قواعد بيانات المستخدم. هناك أوقات يتم فيها إنشاء قواعد البيانات بالترتيب المطلوب ولكن الخادم ليس كذلك. لن ترغب في استرداد جميع قواعد بيانات المستخدم الخاصة بك من النسخ الاحتياطية في هذه الحالة.

6
AndrewSQL

لقد فعلت شيئًا كهذا ونجحت ولكن عليك أن تضع في اعتبارك الفهارس التي تشير إلى نوع البيانات كنص/varchar/nvarchar يجب إسقاطها وتشغيل البرنامج النصي ثم إنشاء الفهارس.

USE YourDataBase
GO

DECLARE @Table_Name NVARCHAR(100)
SET @Table_Name = NULL--- THIS IS THE TableName that you want to change its collation columns

--- if null will set to all tables

DECLARE @TempTable AS TABLE
(
ID INT IDENTITY
,TableName NVARCHAR(100)
,ColumnName NVARCHAR(100)
,TypeName NVARCHAR(100)
,Max_length INT
,Collation_Name NVARCHAR(100)
,EnterDtm DATETIME DEFAULT GETDATE()
)
DECLARE @NewCollation NVARCHAR(100)
SET @NewCollation = 'Latin1_General_CI_AS' --- THIS IS THE COLLATION NAME THAT YOU WANT TO CHANGE

INSERT INTO @TempTable(TableName,ColumnName,TypeName,Max_length,Collation_Name)
SELECT 
QUOTENAME(SCHEMA_NAME(tables.schema_id)) + '.' + QUOTENAME(tables.name) AS TableName
,all_columns.name AS ColumnName
,type_name(all_columns.user_type_id)
,all_columns.max_length
,all_columns.collation_name  
from sys.all_columns INNER JOIN sys.tables ON
tables.object_id = all_columns.object_id
AND collation_name IS NOT NULL
AND all_columns.collation_name != @NewCollation
WHERE tables.object_id = ISNULL(object_id(@Table_Name),all_columns.object_id)


DECLARE @TableID SMALLINT
SET @TableID = (SELECT MIN(ID) FROM @TempTable)

DECLARE @Query NVARCHAR(1000),@TableName NVARCHAR(100),@ColumnName NVARCHAR(100),@TypeName NVARCHAR(100)
,@Size INT

WHILE @TableID IS NOT NULL
BEGIN
    SET @TableName = (SELECT TableName FROM @TempTable WHERE ID = @TableID)
    SET @ColumnName = (SELECT QUOTENAME(ColumnName) FROM @TempTable WHERE ID = @TableID)
    SET @TypeName = (SELECT TypeName FROM @TempTable WHERE ID = @TableID)
    SET @Size = (SELECT Max_length FROM @TempTable WHERE ID = @TableID) 

    SET @Query='ALTER TABLE ' + @TableName + ' ALTER COLUMN ' + @ColumnName + ' ' + @TypeName+ ISNULL ('(' +CAST(@Size AS VARCHAR(200))+')', '') +' COLLATE '+ @NewCollation  
    PRINT (@Query)

    SET @TableID = (SELECT MIN(ID) FROM @TempTable WHERE ID > @TableID)
END 

هذا هو جوابي الأول العفو عن فوضى بلدي

5
Jeffry