Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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 server NewID()函数的澄清_Sql Server_Tsql_Rdbms - Fatal编程技术网

Sql server NewID()函数的澄清

Sql server NewID()函数的澄清,sql-server,tsql,rdbms,Sql Server,Tsql,Rdbms,我有一个存储过程,它接受两个类型为UniqueIdentifier 当我通过显式调用NewId()来代替其中一个参数来调用此存储过程时: exec dbo.TestArgs newid, '34131101-04DE-4B97-8FAC-49C924F7BFCE' 它失败于: 将数据类型nvarchar转换为uniqueidentifier时出错 但是将由NewId()填充的变量传递到调用中是可以的: DECLARE @painInTheArse UniqueIdentifier SET @p

我有一个存储过程,它接受两个类型为
UniqueIdentifier

当我通过显式调用
NewId()
来代替其中一个参数来调用此存储过程时:

exec dbo.TestArgs newid, '34131101-04DE-4B97-8FAC-49C924F7BFCE'
它失败于:

将数据类型nvarchar转换为uniqueidentifier时出错

但是将由
NewId()填充的变量
传递到调用中是可以的:

DECLARE @painInTheArse UniqueIdentifier
SET @painInTheArse = NewID()
EXEC dbo.TestArgs
newid
@painetharse,'34131101-04DE-4B97-8FAC-49C924F7BFCE'

完美地工作


对我来说,这似乎是非常错误的。有人能解释一下吗?

传入存储过程的参数必须是常量。看


首先将函数调用的结果放入参数的解决方案是绝对正确的…

太好了。谢谢。很这是因为NewID()是确定性的,对吗?不,NewID是不确定性的,getdate()也是如此,但是在这个上下文中的任何函数调用都会被SQL抛出。我很想听听SQL专家的意见,为什么…GETDATE()不是确定性的,因为它总是使用相同的参数调用,但每次调用的结果都不同。这就是为什么不能在UDF中使用它(或任何非确定性)函数的原因。@Wil-yep,newid()也不能吗?但在本例中,我们讨论的是为什么在调用存储过程等时不能将函数用作参数,或者我没有领会您的意思?是的……虽然不能从函数内部调用非确定性函数,但可以将非确定性函数用作参数来调用非确定性函数。:)