declare @SqlStr nvarchar(max)
set @SqlStr=''
select @SqlStr=@SqlStr++'alter index all on '+name+' rebuild;'from sysobjects where xtype='U'and(name like'T_%')and(name not like'TM%')
exec (@SqlStr)
需要把它做成定时任务放到bat脚本里面去运行,我想到的是把整个sql写成sql文本放到bat脚本里面去跑
但是我这样跑的话
sqlcmd -S X -U rdsuser -PX -i “D:\sqlserver\sql\rebuild.sql”
直接就报错了,报错是
Msg 1088, Level 16, State 9, Server MSSQL-4CC0E2DF\MSSQL2022STD, Line 1
Cannot find the object “具体表名” because it does not exist or you do not have permissions.
请问这是为啥啊,mysql和tidb是可以直接mysql -e ‘xxx.sql’ 这么执行的
– rebuild.sql 完整内容(替换成你的实际数据库名)
USE [你的目标数据库名]; – 关键:指定要操作的数据库,比如 USE [TestDB];
GO
DECLARE @SqlStr nvarchar(max)
SET @SqlStr = ‘’
– 改用 sys.tables(sysobjects 是兼容视图,推荐用 sys.tables)
SELECT @SqlStr = @SqlStr + ‘ALTER INDEX ALL ON ’ + QUOTENAME(name) + ’ REBUILD;’
FROM sys.tables
WHERE name LIKE ‘T_%’
AND name NOT LIKE ‘TM%’;