1

テーブルの列サイズを大きくする必要があります。以下のクエリを使用してサイズを大きくしていますが、エラーを下回っています

Alter Table Tabl1 Alter Column Col1 VarChar(6) Not NULL

メッセージ 5074、レベル 16、状態 1、行 1
オブジェクト 'Tabl1' は列 'Col1' に依存しています。
メッセージ 5074、レベル 16、状態 1、行 1
統計 '_WA_Sys_Col1_5070F446' は列 'Col1' に依存しています。
メッセージ 4922、レベル 16、状態 9、行 1
ALTER TABLE ALTER COLUMN Col1 は、1 つ以上のオブジェクトがこの列にアクセスしているため、失敗しました。

列への依存関係と同じテーブルのため

これについて助けが必要

4

2 に答える 2

4

SQL Serverは、クエリを解析してクエリプランを作成するときに使用する統計を、時間の経過とともにテーブルに自動的に追加します。列を変更するには、統計を削除する必要があります。例えば:

drop statistics [dbo].[Tabl1].[_WA_Sys_Col1_5070F446]

ただし、SSMSを使用して、_WA_Sys_Col1_5070F446統計を削除する前に統計にある列を表示して、再作成できるようにする必要があります。このようなもの:

create statistics [_WA_Sys_Col1_5070F446] on [dbo].[Tabl1]([Col1])

しかし、もっと多くの列があるかもしれません...それで、あなたがそれを落とす前に、どれが含まれる必要があるかを必ず見つけてください。

このSQLを実行して、ほとんどの依存関係を見つけることができます。統計の依存関係は報告されませんが、他のほとんどの依存関係は検出されます。

SELECT OBJECT_NAME(d.object_id) AS SP_Or_Function, OBJECT_NAME(d.referenced_major_id) AS TableReferenced
FROM   sys.sql_dependencies AS d INNER JOIN
       sys.all_sql_modules AS m ON m.object_id = d.object_id
where  OBJECT_ID(N'Tabl1') = d.referenced_major_id
GROUP BY OBJECT_NAME(d.object_id), OBJECT_NAME(d.referenced_major_id)
ORDER BY SP_Or_Function, TableReferenced

このクエリを使用すると、特定のテーブルで使用されるすべての統計を見つけることができます。

SELECT DISTINCT
OBJECT_NAME(s.[object_id]) AS TableName,
c.name AS ColumnName,
s.name AS StatName,
s.auto_created,
s.user_created,
s.no_recompute,
s.[object_id],
s.stats_id,
sc.stats_column_id,
sc.column_id,
STATS_DATE(s.[object_id], s.stats_id) AS LastUpdated
FROM sys.stats s JOIN sys.stats_columns sc ON sc.[object_id] = s.[object_id] AND sc.stats_id = s.stats_id
JOIN sys.columns c ON c.[object_id] = sc.[object_id] AND c.column_id = sc.column_id
JOIN sys.partitions par ON par.[object_id] = s.[object_id]
JOIN sys.objects obj ON par.[object_id] = obj.[object_id]
WHERE OBJECTPROPERTY(s.OBJECT_ID,'IsUserTable') = 1
AND (s.auto_created = 1 OR s.user_created = 1)
AND object_id(N'Tabl1') = s.[object_id]

最後の2つのSQLクエリについてSQLAuthorityに感謝します。

SQL SERVER –オブジェクトの依存関係のリストを取得する– sp_dependsとinformation_schema.routinesおよびsys.dm_sql_referencing_entities(Gabrielの投稿)

SQL SERVER –データベース全体の統計の詳細を検索– DMV –T-SQLスクリプト

于 2012-08-06T12:13:30.943 に答える
0

以下は SQL Server 2000 ヘルプからの引用です。

列の変更

変更された列は次のものであってはなりません:

.....

  • 列が varchar、nvarchar、または varbinary データ型でない限り、インデックスで使用されます。データ型は変更されず、新しいサイズは古いサイズ以上になります。

  • CREATE STATISTICS ステートメントによって生成される統計で使用されます。まず、DROP STATISTICS ステートメントを使用して統計を削除します。クエリ オプティマイザによって自動的に生成された統計は、ALTER COLUMN によって自動的に削除されます。.....

于 2012-08-06T12:16:46.747 に答える