月度归档:2018年08月

mssql sqlserver 索引建立注意事项—索引禁止使用的数据类型


摘要:
下文讲述sqlserver索引中禁止使用的数据类型说明,如下所示:
实验环境:sql server 2008 R2


紧致创建索引的数据类型:

序号

数据类型

说明
1

CLR定义的数据类型

此类型如果支持二进制顺序,则可以进行索引设置
2

lob类型 image 类型 next text varchar(max)
nvarchar(max) varbinary(max)类型

mssql sqlserver 数据表上建立索引的相关限制说明


摘要:
下文分享sqlserver数据表上索引设置的相关限制说明信息,如下所示:
实验环境:sql server 2008 R2


索引类型

索引数量

索引限制说明
聚集索引

1

由于聚集索引是展示物理表的物理存储顺序,所以每张表只存在一张聚集索引
非聚集索引

249

不包含xml索引的其它索引
xml索引

249

包含xml数据类型列的索引
表空间索引

249

索引键列数

16

大于16列则出现相应的错误信息
最大索引键大小

900字节

如果索引键总和大于900字节,将出现警告或索引创建失败

mssql sqlserver “sp_executesql”系统存储过程运行注意事项


摘要:
今天使用sql server 2008 创建存储过程,在存储过程中使用系统存储过程”sp_executesql”动态运行sql脚本,提示错误信息,
————————————————————
过程需要类型为 ‘ntext/nchar/nvarchar’ 的参数 ‘@statement’
先将解决方法记录如下:

通过翻看
MSSQL sp_executesql exec 用法简介
,发现sp_executesql存储过程接收动态sql需为nchar 、ntext、nvarchar 三种类型,即再动态定义sql时候,将其类型修改为以上三种类型中的任意一种,即可完成相关操作。

例:

IF EXISTS (SELECT * FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'[dbo].[pr_test]') AND type IN (N'P', N'PC'))
DROP PROCEDURE [dbo].[pr_test] 
GO

create proc pr_test 
@str varchar(30)
as
begin 
  declare @sql  varchar(max)
  set @sql='select * from tableName where [info]=@str '
  exec sp_executesql @sql,N'@str varchar(30)',@str 
end 
   ----运行存储过程-----
   exec pr_test 'test' 
   ---弹出相应的错误信息
   ---过程需要类型为 'ntext/nchar/nvarchar' 的参数 '@statement'

将动态sql变量参数类型修改为nvarchar重新运行及完成相关操作.

IF EXISTS (SELECT * FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'[dbo].[pr_test]') AND type IN (N'P', N'PC'))
DROP PROCEDURE [dbo].[pr_test] 
GO



create proc pr_test 
@str varchar(30)
 as
  begin 
    declare @sql  nvarchar(max)  
      ---动态变量接收sql信息必须使用 'ntext/nchar/nvarchar' 类型
      set @sql='select * from tableName where [info]=@str '
      exec sp_executesql @sql,N'@str varchar(30)',@str 
  end 

----运行存储过程-----
  exec pr_test 'test' 
----输出相应的查询结果-----