Come si crea un indice all'interno di una stored procedure? Si lamentaCome posso creare un indice all'interno di una stored procedure?
Msg 102, livello 15, stato 1, procedura createIndexModifiedOn, Linea 12
la sintassi non corretta in prossimità 'primaria'.
Ma ON [PRIMARY]
è ciò che si utilizza SQL Server se si crea un nuovo indice e selezionare Script As New Query
.
Se rimuovo ON [PRIMARY]
allora si dà questo errore
Msg 102, livello 15, stato 1, procedura createIndexModifiedOn, Linea 12
la sintassi non corretta in prossimità ')'.
Ecco la procedura:
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
Questo ha finito per essere la query completa:
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 "?"'