我在名为it(EmployeeDetailKey - varchar(10))的字段中获得了一个值,其中包含连续值,例如
00001,00002,00003 ....
它位于Employeedetail表中。当必须插入新的Employee细节时,我必须获得max(EmployeeDetailKey)并递增1并将其存储回来。如果我有10个需要插入的员工记录,那么必须遵循相同的程序。
如果max(EmployeeDetailKey)= 00003则插入10条记录后 它必须是00013.稍后插入后让我们说100条记录 是00113。
如何以MS-SQL语句的形式完成。
请注意,该列不能是标识类型。
答案 0 :(得分:4)
只需在表格中添加标识列即可。我会建议像:
IntEmployeeDetailKey int not null identity(1, 1) primary key,
. . .
然后添加一个计算列:
EmployeeDetailKey as (right(('00000' + cast(IntEmployeeDetailKey as varchar(10)), 5)
然后SQL Server将自动执行递增。你可以将值作为零填充字符串输出。
答案 1 :(得分:1)
如果您更喜欢不改变表结构的解决方案,那么:
将零填充字符串值转换为int。这在SQl服务器中很容易,因为它可以轻松地将这些字符串转换为数字:
MAX()
这将返回整数值3。
查找MAX()
只需在您刚转换为字符串的列上执行SELECT MAX(CAST(mycolumn AS int)) FROM mytable
,例如......
SELECT MAX(CAST(mycolumn AS int)) + 1 FROM mytable
实际上,您不必进行转换,因为SQL服务器会在原始字符串表示中正确排序值。
增量
这很简单,因为你现在有了整数值,所以......
SELECT FORMAT(MAX(CAST(mycolumn AS int)) + 1, '00000') FROM mytable
将其转换回零填充字符串
SQL Server 2008在这里驯服有点棘手,因为左边填充不是他的专长。但是,从SQL Server 2012开始,有一个FORMAT函数可用,因此,您可以使用...
REPLICATE()
如果您只有SQL Server 2005或2008,则可以使用LEN()
结合SELECT REPLICATE('0', 5 - LEN(MAX(CAST(mycolumn AS int)) + 1)) + CAST((MAX(CAST(mycolumn AS int)) + 1) AS nvarchar(5)) FROM mytable
来获取所需内容(免责声明:UGLY CODE):
SELECT RIGHT('00000' + CAST(MAX(CAST(mycolumn AS int) + 1) as nvarchar(5)), 5) FROM mytable
编辑正如Luaan暗示的那样,您可以使用另一个填充选项(更短且更易读的代码):
public function register()
{
$this->app->singleton('neoclient', function ($app) {
return ClientBuilder::create()
->addConnection('default', 'http', env('NEO4J_HOST'), intval(env('NEO4J_PORT')), true, env('NEO4J_USER'), env('NEO4J_PASSWORD'))
->setDefaultTimeout( intval(env('NEO4J_TIMEOUT')) )
->setAutoFormatResponse(true)
->build();
});
}
答案 2 :(得分:0)
我不知道EmployeeDetailKey
是否必须具有此格式。
我建议您将varchar(10)
的数据类型替换为IDENTITY
。
IDENTITY
是一种特殊的数据类型,每次在父表中插入行时,SQL Server都会自动递增。您可以在此处了解详情:https://msdn.microsoft.com/en-us/library/ms186775.aspx
如果您需要使用前导零来呈现它,您可以随时选择它(从这里自由改编:Most efficient T-SQL way to pad a varchar on the left to a certain length?):
SELECT right('00000'+ rtrim(EmployeeDetailKey), 5) FROM YourTable