sqlserver怎么操作自定义表类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver怎么操作自定义表类型相关的知识,希望对你有一定的参考价值。
参考技术A -- ================================-- 创建和使用自定义表类型
-- ================================
USE master
GO
-- ================================
-- 创建测试数据库
-- ================================
CREATE DATABASE demo
GO
-- ================================
-- 创建一个表
-- ================================
USE demo
GO
CREATE TABLE Customers
(
Id int NOT NULL,
Name char(10) NULL,
PRIMARY KEY (Id)
)
GO
USE demo
GO
-- ================================
-- 创建自定义表类型
-- ================================
CREATE TYPE dbo.CustomerTable AS TABLE
(
Id int NOT NULL,
Name char(10) NULL,
PRIMARY KEY (Id)
)
GO
-- =================================
-- 直接使用自定义表类型
-- =================================
DECLARE @c CustomerTable
INSERT INTO @c VALUES(1,'Xizhang')
SELECT * FROM @c
-- =================================
-- 在存储过程中使用自定义表类型
-- =================================
CREATE PROC GetCustomers
(@c CustomerTable READONLY)
AS
INSERT Customers SELECT * FROM @c --将传过来的参数(其实是一个表)的数据插入到Customers表里面去
-- =================================
-- 调用该存储过程,一次性插入4行数据
-- =================================
DECLARE @temp CustomerTable
INSERT INTO @temp VALUES(7,'Xizhang')
INSERT INTO @temp VALUES(2,'Xizhang')
INSERT INTO @temp VALUES(3,'Xizhang')
INSERT INTO @temp VALUES(4,'Xizhang')
EXEC GetCustomers @c=@temp
SELECT * FROM Customers
-- =================================
-- 清理数据库
-- =================================
USE master
GO
DROP DATABASE demo
GO
看起来不错对吧,但是你应该马上想到一个问题,如果说这个存储过程要在客户端代码中调用,那么该怎么提供这个参数值呢?
using System.Data.SqlClient;
using System.Data;
class Program
static void Main(string[] args)
DataTable tb = GetData();
using (SqlConnection conn = new SqlConnection("server=sql2008;database=demo;integrated security=true"))
using (SqlCommand cmd = conn.CreateCommand())
cmd.CommandText = "GetCustomers";
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param = new SqlParameter("@c", SqlDbType.Structured);//这个类型很关键
param.Value = tb;
cmd.Parameters.Add(param);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
Console.WriteLine("完成操作");
Console.Read();
private static DataTable GetData()
DataTable tb = new DataTable();
tb.Columns.Add("Id",typeof(int));
tb.Columns.Add("Name", typeof(string));
//添加100个客户资料
for (int i = 0; i < 100; i++)
DataRow row = tb.NewRow();
row[0] = i;
row[1] = "Name " + i.ToString();
tb.Rows.Add(row);
return tb;
参考技术B 基于SQL server要原创吗,我可为您操作.
SQLserver 自增长列
为一个商品表插入数据时,商品编号为自增长列,怎么实现插入的值为0001,0002,0003,0004......
如果你的表有个自增长列,可以用下面的语句一次性操作,而且可以保证编码不会插入重复值declare @name varchar(4);
--max(id)是你自增长列id的最大值
set @name=(right('0000'+convert(varchar(5),((select max(id) from 表)+1)),4));
--print @name;
insert into 表 values(@name);
select * from 表 ; 参考技术A ALTER table 表名 ADD
字段名 INT IDENTITY(1,1)
这个是给没有id字段的表添加一个自增ID字段
如果已经有了id 字段,那么必须要先drop掉已有字段。
代码如下:
ALTER table 表名 drop column 字段名
然后再执行上面的添加命令即可 参考技术B 自增长列的数据类型只能是"整形类".
像0001,0002这样的值会被自动转换成1,2.
如果是为了整齐好看,那么在建表时可以把标识种子设为1000001,标识递增量为1 参考技术C 可以在设计数据库的时候做(设置标识种子是0001,标识增量是1就可以了啊),也可以用代码 自增长列ll(ll identity(0001,1))
以上是关于sqlserver怎么操作自定义表类型的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 自定义函数(Function)——参数默认值