200以上の列をvarchar(50)からfloatに変更するために、(すべての列に名前を付けずに)作成できる簡単なスクリプトはありますか?データは技術的にはフロートですが、誤ってvarcharで作成されました。失う精度は気にしません。
質問する
571 次
2 に答える
3
最終的に、変更によりALTER TABLE
ステートメントの列に名前が付けられます。ただし、少し賢くて忍耐力があれば、sys.syscolumnsを文字列でスリングすることでそのステートメントを生成できます。大まかに次のようなもの
select 'alter table tablename '
select 'alter column [' + name + '] float not NULL'
from sys.syscolumns where id = objectid(tablename) order by name
それはあなたが望むことをするためにSQLを生成します。注意深く調べてから実行してください。
于 2013-03-14T01:42:34.710 に答える
0
これは、上記のJames K. Lowdenによって作成されたクエリの更新であり、varchar(50)型の列のみを提供します。うまくいけば、これで少し簡単になりますが、それでもすべてのクエリを注意深く調べる必要があります。
select 'ALTER TABLE ' + s.name + '.' + T.name + ' ALTER COLUMN [' + C.name + '] float not null'
from sys.columns C
inner join sys.tables T on C.object_id = T.object_id
inner join sys.schemas S on T.schema_id = S.schema_id
where
C.system_type_id = 167 -- this is type for varchar
and C.max_length = 50 -- selects only varchars(50) and avoids others
于 2013-03-15T14:00:50.103 に答える