【发布时间】:2021-10-05 02:10:35
【问题描述】:
当我执行它时,我的 SQL 脚本运行良好。
现在的问题是,当我检查表索引时,此脚本不会创建索引。
下面是脚本
CREATE PROCEDURE test
@TableName nvarchar(128)
AS
BEGIN
DECLARE @sql nvarchar(max)
SET @Sql = N'IF NOT EXISTS (SELECT name FROM sys.indexes WHERE name = Index_type)
CREATE UNIQUE CLUSTERED INDEX Index_type
ON ' + QUOTENAME(@TableName) + N'(CustomerId) ON "PRIMARY"';
END
EXECUTE test customer
【问题讨论】:
-
除了问题@GordonLinoff 提到对
sys.indexes的任何检查也应该检查object_id- 索引名称不必在对象之间是唯一的 -
尽管忘记了所有这些,这个过程实际上有什么用途?它只适用于包含
CustomerID列并且该列应该是集群索引的表,并且这感觉不需要动态完成,它应该在创建时完成一次表,然后再也没做过。 -
是的,但是为什么需要动态完成呢?这意味着您需要动态检查索引是否存在,而从逻辑上讲,您只需要在创建表的同时创建一次聚集索引,因此这应该在您的创建表脚本中,而不是在调用一些非常不稳定的动态 SQL
-
听起来我们这里有一个xy problem。
-
如果你只需要在这15个表上创建一次这些索引,它仍然不需要存储过程,只需编写15个创建索引脚本。大约需要 10 分钟,然后它就完成了,你再也不用担心它了。如果您将来要创建更多表,只需在创建表的同时创建索引。如果您要删除聚集索引,然后简单地禁用执行此操作的任何进程,这是一个糟糕的主意
标签: sql sql-server database stored-procedures azure-sql-database