5
ストアドプロシージャ内でインデックスを作成するにはどうすればよいですか?これはメッセージ102、レベル15、状態1、プロシージャcreateIndexModifiedOn、ライン12
'PRIMARY' 付近に不適切な構文ストアドプロシージャ内でインデックスを作成するにはどうすればよいですか?
を文句を言います。
しかしON [PRIMARY]
新しいインデックスを作成し、Script As New Query
を選択した場合、SQL Server自体が使用するものです。
私はその後、ON [PRIMARY]
を削除した場合には、メッセージ102、レベル15、状態1、プロシージャcreateIndexModifiedOn、ライン12
近くに不適切な構文 ')' このエラーに
を与えます。
ここでは手順です:
create proc [dbo].createIndexModifiedOn
@table char(256)
as begin
declare @idx char(256)
set @idx = 'idx_' + SUBSTRING(@table, 7, len(@table)-1) + '_modified_on';
IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(@table) AND name = @idx)
DROP INDEX [@idx] ON [@table]
CREATE NONCLUSTERED INDEX [@idx] ON [@table]
(
[modified_on] ASC
) ON [PRIMARY]
go
これは、完全なクエリことになった:
create proc [dbo].createIndexModifiedOn
@table varchar(256)
as
declare @idx varchar(256);
declare @sql nvarchar(999);
set @idx = 'idx_' + SUBSTRING(@table, 8, len(@table)-8) + '_modified_on';
set @sql = '
IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(''' + @table + ''') AND name = ''' + @idx + ''')
DROP INDEX [' + @idx + '] ON ' + @table + '
CREATE NONCLUSTERED INDEX [' + @idx + '] ON ' + @table + '
(
[modified_on] ASC
) ON [PRIMARY]
';
print @table + ', ' + @idx;
BEGIN TRY
EXEC sp_executesql @sql;
END TRY
BEGIN CATCH
PRINT 'errno: ' + ltrim(str(error_number()))
PRINT 'errmsg: ' + error_message()
END CATCH
GO
EXEC sp_MSforeachtable 'exec createIndexModifiedOn "?"'