小弟,现在遇到个情况如下:Table-valued parameters以下简称(TVP)
要用TVP肯定是要在SQL里面定义一个TABLE的TYPE,然后再SP里面使用这个TYPE作为参数
SQL里面有一个TYPE和对应的增删改3个批量操作的SP
CREATE TYPE [dbo].[TVP_TestTVP] AS TABLE(
[TVPID] [bigint] NOT NULL,
[TVPNAME] [varchar](200) NULL,
[TVPCONTENT] [varchar](max) NULL,
[TVPSIZE] [int] NULL,
[DataChange_LastTime] [datetime] NULL DEFAULT (getdate()),
PRIMARY KEY CLUSTERED 
(
[TVPID] ASC
)WITH (IGNORE_DUP_KEY = OFF)
)
.NET里面 需要
 var command = new SqlCommand();
command.Connection = conn;
var table = new DataTable(); //这里定义的TABLE的列的数量一定要和上面的TYPE一样
table.Columns.Add();
table.Columns.Add();
table.Columns.Add();
table.Columns.Add();
table.Columns.Add();command.CommandText = "dbo.spT_TestTVP_u";
command.CommandType = CommandType.StoredProcedure;
SqlParameter tvpParam = command.Parameters.AddWithValue("@TVP_TestTVP", table);
tvpParam.SqlDbType = SqlDbType.Structured;
command.ExecuteNonQuery();问题来了:
当我这个TYPE新增一列了会删除原来的TYPE新建一个新的TYPE,
但是APP没有新增一列,会报出列的数量不匹配有没有什么办法可以让程序做到向下兼容。。因为公司发布的时候数据库发布和APP发布是分开的
总会有时间差。我想到的办法是:
每次表结构变动,生成新的TYPE和SP,而不是去删除现有的TYPE和SP,那这样一来,会有很多TYPE和SP我想有什么办法可以办到,只用1个TYPE,在发布的时候让程序能否兼容