Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用标识列向计算列添加值_Sql_Tsql_Stored Procedures_Sql Server 2016 - Fatal编程技术网

Sql 使用标识列向计算列添加值

Sql 使用标识列向计算列添加值,sql,tsql,stored-procedures,sql-server-2016,Sql,Tsql,Stored Procedures,Sql Server 2016,有时我需要将临时值存储到字段中。我有一个存储过程,它使用以下方法添加它: Insert new record first then SELECT @Record_Value = SCOPE_IDENTITY(); UPDATE ADMIN_Publication_JSON SET NonPubID = CAST(@Record_Value as nvarchar(20)) + '_tmp' WHERE RecID = @Record_Value 它只需获取标识值并在末尾添加一个“_tmp

有时我需要将临时值存储到字段中。我有一个存储过程,它使用以下方法添加它:

Insert new record first then

SELECT @Record_Value = SCOPE_IDENTITY(); 

UPDATE ADMIN_Publication_JSON
SET NonPubID = CAST(@Record_Value as nvarchar(20)) + '_tmp'
WHERE RecID = @Record_Value
它只需获取标识值并在末尾添加一个“_tmp”。是否有一种方法可以在表中创建一个默认值,如果我没有在该字段中插入值,该默认值将自动创建

NonPubID
列只是一个
NVARCHAR(50)


感谢您查看下面的NewKey col:

CREATE TABLE #Table
(
   ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED,
   IDValue VARCHAR(1) ,
   ModifiedDT DATETIME NULL,   
   NewKey AS ( CONVERT(VARCHAR(100),ID)+'_Tmp' )
)

INSERT   #Table( IDValue, ModifiedDT ) 
SELECT   'A', GETDATE()
UNION ALL
SELECT   'Y', GETDATE() - 1
UNION ALL
SELECT   'N', GETDATE() - 5

SELECT * FROM #Table

查看下面的NewKey col:

CREATE TABLE #Table
(
   ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED,
   IDValue VARCHAR(1) ,
   ModifiedDT DATETIME NULL,   
   NewKey AS ( CONVERT(VARCHAR(100),ID)+'_Tmp' )
)

INSERT   #Table( IDValue, ModifiedDT ) 
SELECT   'A', GETDATE()
UNION ALL
SELECT   'Y', GETDATE() - 1
UNION ALL
SELECT   'N', GETDATE() - 5

SELECT * FROM #Table

您可以编写一个触发器,在插入时用该字符串替换
NULL

CREATE TRIGGER admin_publication_json_bi
               ON admin_publication_json
               AFTER INSERT
AS
BEGIN
  SET NOCOUNT ON;

  UPDATE apj
         SET apj.nonpubid = concat(convert(varchar(20), i.id), '_tmp')
         FROM admin_publication_json apj
              INNER JOIN inserted i
                         ON i.id = apj.id
         WHERE i.nonpubid IS NULL;
END;


缺点:如果需要,您不能为该列显式插入
NULL
s。

您可以编写一个触发器,在插入
时用该字符串替换
NULL

CREATE TRIGGER admin_publication_json_bi
               ON admin_publication_json
               AFTER INSERT
AS
BEGIN
  SET NOCOUNT ON;

  UPDATE apj
         SET apj.nonpubid = concat(convert(varchar(20), i.id), '_tmp')
         FROM admin_publication_json apj
              INNER JOIN inserted i
                         ON i.id = apj.id
         WHERE i.nonpubid IS NULL;
END;


缺点:如果需要,您不能为该列显式插入
NULL
s。

对于插入,可以使用
DEFAULT
子句。对于更新,可以使用触发器。两者都可以使用序列,而不是标识。我不想将其用作标识,但我想以某种方式使用标识列将默认值添加到NVARCHAR(50)字段中,还是应该将其保留在存储过程中?@user1314159。是否要将
NonPubId
设置为任何其他值?对于INSERT,可以使用
DEFAULT
子句。对于更新,可以使用触发器。两者都可以使用序列,而不是标识。我不想将其用作标识,但我想以某种方式使用标识列将默认值添加到NVARCHAR(50)字段中,还是应该将其保留在存储过程中?@user1314159。是否要将
NonPubId
设置为任何其他值?这意味着
NewKey
无法更新。OP没有指定,因此这可能是一个很好的答案,但就我个人而言,我从
\u tmp
怀疑OP确实想要更新列。抱歉-我不清楚,但是的,该列通常插入了正确的值。然而;有时正确的值当前不可用,所以我想使用identity columns值加上_tmp,所以我以后要做的就是删除_tmp,我知道哪些记录需要用正确的值更新。好吧,我不明白为什么你会想这样做,即使我提供了上面的答案。RecID列是非null且不可更新的列类型,因为它是标识列。无论您在非ubid列中存储什么,都可以从ID+“\u tmp”建立,所以不需要额外的列。我肯定错过了什么!95%的时间我从政府网站PubMed获得出版物ID。这些是研究人员撰写的文章。这些数字看起来像25465297或26190575。这些数字存储在NVARCHAR(50)字段中,因为如果文章未在PubMed上发布,则必须添加其他值。这些都是即兴创作的,比如一本书、一段视频或一篇博客文章。任何研究人员想要得到赞扬的事情。该表有一列标识它是什么类型的条目。tmp用于所有其他类型的研究,而不是编一个数字或使用guid或其他任何东西,我尝试使用记录id和_tmp。这有帮助吗?这意味着
NewKey
无法更新。OP没有指定,因此这可能是一个很好的答案,但就我个人而言,我从
\u tmp
怀疑OP确实想要更新列。抱歉-我不清楚,但是的,该列通常插入了正确的值。然而;有时正确的值当前不可用,所以我想使用identity columns值加上_tmp,所以我以后要做的就是删除_tmp,我知道哪些记录需要用正确的值更新。好吧,我不明白为什么你会想这样做,即使我提供了上面的答案。RecID列是非null且不可更新的列类型,因为它是标识列。无论您在非ubid列中存储什么,都可以从ID+“\u tmp”建立,所以不需要额外的列。我肯定错过了什么!95%的时间我从政府网站PubMed获得出版物ID。这些是研究人员撰写的文章。这些数字看起来像25465297或26190575。这些数字存储在NVARCHAR(50)字段中,因为如果文章未在PubMed上发布,则必须添加其他值。这些都是即兴创作的,比如一本书、一段视频或一篇博客文章。任何研究人员想要得到赞扬的事情。该表有一列标识它是什么类型的条目。tmp用于所有其他类型的研究,而不是编一个数字或使用guid或其他任何东西,我尝试使用记录id和_tmp。这有帮助吗?谢谢——我喜欢你的代码,我想我会尝试一下做一些改变——但我仍然喜欢你的代码,我可以尝试一下,但我想我会坚持使用存储过程中的代码,因为我可以更好地控制如何处理来自它的数据。例如,如果它是一本参考书,我可以使用“\u 001”或一篇普通的文章“什么都没有”,或者可能是一篇博客文章“\u blog”。再次感谢Hanks——我喜欢你的代码,我想我会尝试一下做一些改变——但我仍然喜欢你的代码,我可以尝试一下,但我想我会坚持使用存储过程中的代码,因为我可以更好地控制如何处理来自它的数据。例如,如果它是一本参考书,我可以使用“\u 001”或一篇普通的文章“什么都没有”,或者可能是一篇博客文章“\u blog”。再次感谢