请问大家一个sqlserver 问题

sqlserver 小白 请问大家一个问题
背景是要对某些表做一个索引rebuild,更新统计信息这些动作,SQL 已经写出来,并且可以在sqlserver里面运行,类似这样

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’ 这么执行的

:yum:不是语法问题,是里面查出来系统对象了。从sys.tables表查试试

– 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%’;

– 打印生成的SQL(调试用,可注释)
PRINT @SqlStr;
– 执行生成的SQL
EXEC sp_executesql @SqlStr;

– 可选:更新统计信息(你提到的更新统计信息需求)
EXEC sp_updatestats;
修正一下SQL的语法

你这个是ai 生成的吗,我use 到那个对应的库就好了,但是不需要use go 这样

没用过sql server

 on  '+name+' rebuild;'f
```   这里只有表名吧?带上库名.表名

带上库名也一样,那个是系统对象,没权限操作的。我本地执行sql复现了。

windows不是有计划任务吗

你这调试的,起码打印下表名啊,还有定时用过程加代理不行么

感谢老师分享