sp_MSforeachtable을 사용하여 모든 테이블에 인덱스를 추가하는 방법은 무엇입니까? 그것은 오류를주고있다.sp_MSforeachtable을 사용하여 여러 줄 쿼리를 실행하는 방법
는EXEC sp_MSforeachtable @precommand = 'declare @idx as char;',
@command1 = '
set @idx = ''idx_'' + ? + ''_modified_on'';
print @idx;
IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N''[dbo].[?]'') AND name = N''@idx'')
DROP INDEX [@idx] ON [dbo].[?]
CREATE NONCLUSTERED INDEX [@idx] ON [dbo].[?]
(
[modified_on] ASC
) ON [PRIMARY]
'
하나는 이러한 오류 : 나는 명령 내부의 선언을 배치하지만,이 오류 좀하려고
Msg 137, Level 15, State 1, Line 2
Must declare the scalar variable "@idx".
: 여기
Msg 4104, Level 16, State 1, Line 3
The multi-part identifier "dbo.DIAG_contractAuditHistory" could not be bound.
는에 업데이트 시도 테스트 SQL과 함께 구문 오류를 수정했지만 여전히 이상한 오류가 발생했습니다. 저장 프로 시저로 문제를 해결하고 각 테이블에 대해 저장 프로 시저를 호출했습니다. How do I create an index inside a stored procedure?
:EXEC sp_MSforeachtable @command1 = '
declare @idx as varchar(256);
set @idx = ''idx_'' + SUBSTRING(''?'', 8, len(''?'')-8) + ''_modified_on'';
print @idx;
IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N''?'') AND name = @idx )
DROP INDEX [@idx] ON ?
IF EXISTS (select * from sys.columns where object_id = OBJECT_ID(N''?'') and name = ''modified_on'')
CREATE NONCLUSTERED INDEX [@idx] ON ?
(
[modified_on] ASC
) ON [PRIMARY]
'
declare @cat as char;
set @cat='dog';
print @cat;
EXEC sp_MSforeachtable 'print ''idx_'' + SUBSTRING(''?'', 8, len(''?'')-8) + ''_modified_on'';'
EXEC sp_MSforeachtable 'print ''?'''
print substring('[dbo].[merchantNotes]', 8, (len('[dbo].[merchantNotes]')-9))
select * from sys.columns where object_id = OBJECT_ID(N'[dbo].[banks]') and name = 'modified_on'
SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'contractPaymentHistory') AND name = 'idx_contractPaymentHistory_modified_on'
이 약 2 다스 테이블을 위해 일 것은, 그것은 그래서 다른 전략을 사용하여 종료 및 인덱스를 만들 수있는 저장 프로 시저를 생성
Msg 1934, Level 16, State 1, Line 9 CREATE INDEX failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or filtered indexes and/or query notifications and/or XML data type methods and/or spatial index operations.
같은 이상한 오류를 준다
@precommand 같은 배치에 있지 않습니다.. 호출 범위/배치에서 실행됩니다. 전역 또는 계층 적 범위 (#temp 테이블과 같은)를 가지는 설정은 DECLARE가 로컬 범위에만 적용됩니다. – RBarryYoung