qq_37033096 2023-07-21 16:03 采纳率: 0%
浏览 14

怎么创建表名是参数的索引

怎么创建表名为参数的索引呢?
创建索引的sql为:
create index [索引名] ON 表名
其中表名是参数,这个语句改怎么写?
举例:
DECLARE @tabName varchar(50)
set @tabName = 'student_' + (SELECT (RIGHT(YEAR(GetDate()), 4) + RIGHT(100+Month(GetDate()), 2) + RIGHT(100+day(GetDate()), 2)));

IF EXISTS (SELECT * FROM dbo.SysObjects WHERE id = object_id(@tabName)
AND OBJECTPROPERTY(ID, 'IsTable') = 1)
create index index_111 on @tabName(name)
ELSE
PRINT '不存在'

  • 写回答

1条回答 默认 最新

  • 易只轻松熊 2023-07-21 21:32
    关注

    在SQL Server中,无法直接在表名为参数的情况下创建索引。这是因为在CREATE INDEX语句中,表名必须是静态文本,而不能是变量或参数。

    但是,你可以使用动态SQL来解决这个问题。动态SQL允许你以字符串形式构建和执行SQL语句。以下是通过动态SQL创建索引的示例代码:

    sql
    DECLARE @tabName VARCHAR(50)
    SET @tabName = 'student_' + (SELECT (RIGHT(YEAR(GETDATE()), 4) + RIGHT(100+MONTH(GETDATE()), 2) + RIGHT(100+DAY(GETDATE())), 2)))
    
    IF EXISTS (SELECT * FROM dbo.SysObjects WHERE id = OBJECT_ID(@tabName) AND OBJECTPROPERTY(ID, 'IsTable') = 1)
    BEGIN
        DECLARE @sql NVARCHAR(MAX)
        SET @sql = 'CREATE INDEX index_111 ON ' + QUOTENAME(@tabName) + '(name)'
        EXEC sp_executesql @sql
    END
    ELSE
        PRINT '不存在'
    
    

    在上面的代码中,我们使用了sp_executesql存储过程来执行动态SQL语句。首先,我们检查表是否存在,如果存在,则构建CREATE INDEX语句并将其存储在@sql变量中。然后,我们使用sp_executesql来执行@sql中的动态SQL语句创建索引。

    请注意,动态SQL语句需要小心使用,因为它可能受到SQL注入等安全问题的影响。在使用动态SQL时,请确保输入参数的合法性,并谨慎处理动态构建的SQL语句。

    评论

报告相同问题?

问题事件

  • 修改了问题 7月21日
  • 创建了问题 7月21日

悬赏问题

  • ¥15 求一个C# sm4 加密解密的代码
  • ¥15 想做个网络加速器,怎么实现
  • ¥20 centos7下载mysql提示DNS解析异常
  • ¥20 vx转账功能对方不能领取
  • ¥15 vue2+codemirror 运行后页面光标太大了
  • ¥15 pdfjs库如何在前端实现打印、旋转等功能
  • ¥15 combobox数据绑定问题
  • ¥15 maven打包时,为什么有的依赖打不进去包
  • ¥15 求复现机器学习文章一篇
  • ¥15 爬虫抓取数据|解析视频文本内容(相关搜索:自动化)