mssql sqlserver 存储过程出现“为过程或函数指定了过多的参数”错误信息的原因分析


摘要:
下文讲述sqlserver中,存储过程中的sql脚本出现”为过程或函数指定了过多的参数”错误提示信息的处理方法,如下所示:
实验环境:sql server 2008 R2

为过程或函数指定了过多的参数的原因分析:

原因1:存储过程所需的参数未指定

在调用存储过程,没有为存储过程中必填参数进行赋值,导致运行存储过程时,出现以上的错误提示信息,
解决方法:
为必须存储过程或函数指定相应的参数。

原因2: 存储过程同系统存储过程出现同步,执行的时候会调用系统存储过程

系统自带的存储过程默认以sp开头,
当我们执行一个存储过程时,首先会从master数据开始检查并执行,如果用户自定义的存储过程和系统存储过程名称相同,那么每次执行的时候,都是执行系统存储过程,
用户自定义的存储过程永远得不到执行。
解决方法:
在用户自定义存储过程时,严格使用自己的一套存储过程编码规则,避免出现自定义存储过程和系统存储过程出现同名的情况发生。

原因3:数据库调用错误

执行存储过程所在的数据库发生错误,
例:
执行的存储过程的数据库位于旧版本的系统中
解决方法:
核查执行存储过程所在的数据库的参数和sql脚本中调用的参数个数是否一致

mssql sqlserver 使用sql脚本创建自定义表类型的方法分享


摘要:
下文讲述sqlserver中,自定义表类型的方法分享,如下所示
实验环境:sqlserver 2008 R2



sqlserver表类型,可以将一张数据表作为参数发送,在sql脚本中进行使用,如下所示:


例:

    ---创建表类型

    IF TYPE_ID ('dbo.typeTableMaoMao') IS NOT NULL
      DROP TYPE dbo.typeTableMaoMao


    CREATE TYPE dbo.typeTableMaoMao AS TABLE
    (
     [keyId]  int,  
     info1    varchar(30),
     info2    varchar(30)
    )
    go
  

举例:使用表类型typeTableMaoMao的sql脚本举例

      
    DECLARE @t  typeTableMaoMao 
    
     insert into  @t
     (keyId,info1,info2)
     values
     (1,N'sqlserver',N'sql爱好者')


     insert into  @t
     (keyId,info1,info2)
     values
     (2,N'说明',N'猫猫小屋')

       
     SELECT * FROM @t
  

mssql sqlserver 创建数据库外键的两种方式分享


摘要:
下文通过举例的方式讲述在sqlserver中创建外键的两种方法,如下所示:
实验环境:sql server 2008 R2



方法1:创建表时,创建外键
方法2:创建表后,再通过修改脚本创建外键

----方法1:在创建表 maomao365.comB 时,直接创建外键
create table [maomao365.comA](
   billNo varchar(30),
    info  nvarchar(33)
)
go
create table  [maomao365.comB](
    billNo  varchar(30),
    qty      int,
    constraint fk_billNo FOREIGN KEY(billNo) REFERENCES  [maomao365.comb](billNo)
)
go

go
drop  table [maomao365.comA]
drop table  [maomao365.comB]

go
----方法2:创建表后,再通过sql脚本创建外键
create table [maomao365.comA](
   billNo varchar(30),
    info  nvarchar(33)
)
go
create table  [maomao365.comB](
    billNo  varchar(30),
    qty      int

) 
go
alter table [maomao365.comB] add
     constraint fk_billNo FOREIGN KEY(billNo) REFERENCES  [maomao365.comb](billNo)
 
go
drop  table [maomao365.comA]
drop table  [maomao365.comB]