Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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 SELECT语句中的日期始终相同_Sql_Sql Server_Select_Sysdatetime - Fatal编程技术网

Sql SELECT语句中的日期始终相同

Sql SELECT语句中的日期始终相同,sql,sql-server,select,sysdatetime,Sql,Sql Server,Select,Sysdatetime,我试图将数据从一个表插入到一个具有两列键的表中。源表不共享目标表的键。目标中的两个键列都是varchar 我有一个插入声明: INSERT INTO Table1 (Invoice, DetailLine, SomeData1, SomeData2) SELECT ('1'+RIGHT('00000000000000' + CONVERT(varchar, DatePart(ns,SYSDATETIME()), 14), 0, 'STARTING_VALUE_1407', [ActualVal

我试图将数据从一个表插入到一个具有两列键的表中。源表不共享目标表的键。目标中的两个键列都是varchar

我有一个插入声明:

INSERT INTO Table1 (Invoice, DetailLine, SomeData1, SomeData2) 
SELECT ('1'+RIGHT('00000000000000' + CONVERT(varchar, DatePart(ns,SYSDATETIME()), 14), 0, 'STARTING_VALUE_1407', [ActualValue] 
FROM Table2;
当我执行上述操作时,DateTime2对象的毫秒数都是相同的,就好像它只对该值求值一次。这使我无法将其用作临时唯一密钥。是否可以在SELECT语句中使用SYSDATETIME()或任何其他日期函数,并为每一行重新计算值?如果没有,在选择通常不共享目标表键的数据时,是否有方法在执行“插入到SELECT”时生成唯一值?

该函数在查询中计算一次,因为它被视为唯一值

您可以尝试以下窗口功能:


我不确定您是否需要与毫秒挂钩,或者同一行中的值是否需要相同,但可以使用以下方法获得唯一性:

SELECT NEWID() AS GuidNo1, 
       NEWID() AS GuidNo2 


查看列类型
TIMESTAMP
:如果需要为每一行生成唯一的值,可以通过
newid()
使用GUID,您可以首先将其插入到具有Invoice as IDENTITY()列的临时表中,然后从临时表插入到表1中。请不要将日期/时间数据作为唯一密钥的一部分。另外。写
纳秒
需要多长时间?大约15纳秒?只需这样做,并使您的代码自我记录,而不是。
SELECT NEWID() AS GuidNo1, 
       NEWID() AS GuidNo2 
SELECT CAST(RAND() * 1000000 AS INT) AS [RandomNumber1], 
       CAST(RAND() * 1000000 AS INT) AS [RandomNumber2]