将当前数据库中所有表的smalldatetime 列改为nvarchar(20)

-- 将当前数据库中, 所有表的smalldatetime 列改为nvarchar(20)<!----><o:p></o:p>

-- 如果列上有索引/默认值之类的依赖项, 则无法修改<o:p></o:p>

EXEC sp_msforeachtable<o:p></o:p>

    @command1 = N'<o:p></o:p>

DECLARE CUR CURSOR LOCAL<o:p></o:p>

FOR<o:p></o:p>

SELECT <o:p></o:p>

    N''ALTER TABLE ? ALTER COLUMN ''<o:p></o:p>

       + QUOTENAME(C.name)<o:p></o:p>

       + N''nvarchar(20)''<o:p></o:p>

FROM syscolumns C, systypes T<o:p></o:p>

WHERE C.xusertype = T.xusertype<o:p></o:p>

    AND T.name = ''smalldatetime''<o:p></o:p>

    AND C.id = OBJECT_ID(N''?'')<o:p></o:p>

OPEN CUR<o:p></o:p>

DECLARE @s nvarchar(4000)<o:p></o:p>

FETCH CUR INTO @s<o:p></o:p>

WHILE @@FETCH_STATUS = 0<o:p></o:p>

BEGIN<o:p></o:p>

    PRINT(@s)<o:p></o:p>

    EXEC(@s)<o:p></o:p>

    FETCH CUR INTO @s<o:p></o:p>

END<o:p></o:p>

CLOSE CUR<o:p></o:p>

DEALLOCATE CUR<o:p></o:p>

',<o:p></o:p>

    @whereand = N'<o:p></o:p>

       AND EXISTS(<o:p></o:p>

              SELECT * FROM syscolumns C, systypes T<o:p></o:p>

              WHERE C.xusertype = T.xusertype<o:p></o:p>

                  AND T.name = ''smalldatetime''<o:p></o:p>

                  AND C.id = O.id)<o:p></o:p>

'

你可能感兴趣的:(C++,c,C#)