Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 SQL Server 2005-T-SQL-如何将GUID获取为标量函数值_Sql Server_Database_Tsql - Fatal编程技术网

Sql server SQL Server 2005-T-SQL-如何将GUID获取为标量函数值

Sql server SQL Server 2005-T-SQL-如何将GUID获取为标量函数值,sql-server,database,tsql,Sql Server,Database,Tsql,我试着写这样的代码 CREATE PROCEDURE DBO.GENCODE AS BEGIN SELECT NEWID() AS GUID END GO 问题是这个过程不返回var值,所以我不能将它用于insert值。所以我的问题是。。。如何使像这样的代码成为可能 DECLARE @code VARCHAR(MAX) SET @code = DBO.GENCODE() INSERT INTO TABLEA(CODE) VALUES(@code) 这个工作片段作为一个版

我试着写这样的代码

CREATE PROCEDURE DBO.GENCODE
AS
BEGIN

SELECT NEWID() AS GUID

END
GO
问题是这个过程不返回var值,所以我不能将它用于insert值。所以我的问题是。。。如何使像这样的代码成为可能

DECLARE @code VARCHAR(MAX)
SET @code = DBO.GENCODE()

    INSERT INTO TABLEA(CODE)
    VALUES(@code)
这个工作片段作为一个版本

DECLARE @code VARCHAR(MAX)
SET @code=(SELECT NEWID() AS GUID)
INSERT INTO TABLEA(CODE)
VALUES(@code)
?

任何有用的评论都将不胜感激

我逐字回答这个问题是因为我假设存储过程中有比这更复杂的逻辑

编辑问题编辑:您要么使用我在上面展示的
INSERT
/
EXEC
技巧,要么使用标量UDF。使用存储过程不可能做到这一点

我逐字回答这个问题是因为我假设存储过程中有比这更复杂的逻辑


编辑问题编辑:您要么使用我在上面展示的
INSERT
/
EXEC
技巧,要么使用标量UDF。使用存储过程是不可能做到这一点的。

至于现在,我对这段代码感到满意,因为它工作良好,生成了一个随机代码

DECLARE @code VARCHAR(MAX)
SET @code=(SELECT NEWID() AS GUID)
INSERT INTO TABLEA(CODE)
VALUES(@code)

但我仍然希望它能作为一个函数工作。也许再晚一点:)

至于现在,我对这段代码很满意,因为它工作得很好,生成了一个随机代码

DECLARE @code VARCHAR(MAX)
SET @code=(SELECT NEWID() AS GUID)
INSERT INTO TABLEA(CODE)
VALUES(@code)


但我仍然希望它能作为一个函数工作。也许再晚一点:)

这应该可以正常工作
INSERT tabla(code)VALUES(NEWID())
这应该可以正常工作
INSERT tabla(code)VALUES(NEWID())
表架构中的代码字段类型是什么?它应该是uniqueidentifier。您看到的问题是,NEWID()返回的uniqueidentifier类型正在进行类型更改,以便能够放入varchar字段。因此,您有两个选择,您可以更改表以使代码字段类型为uniqueidentifier,或者您可以在values子句中执行类似的操作:values(CAST(NEWID()as VARCHAR(MAX)),2user592704:如果您在字段中插入一个36字节长的GUID,它应该(a)是uniqueidentifier(这是“本机的”)GUID的数据类型),或者(b)如果它必须是字符串,它绝对不应该是
VARCHAR(MAX)
-
VARCHAR(36)
也一样好@marc_s-如果你只存储一个GUID,并且,正如你所说,如果你必须将它存储为字符串,那么有一次我会使用
char
over
varchar
@Damien_,不信者:好的一点,因为它总是有36个字符长,所以让它成为
varchar
是没有意义的。我通常只对x使用
CHAR(x)
,表模式中的代码字段类型是什么?它应该是uniqueidentifier。您看到的问题是,NEWID()返回的uniqueidentifier类型正在进行类型更改,以便能够放入varchar字段。因此,您有两个选择,您可以更改表以使代码字段类型为uniqueidentifier,或者您可以在values子句中执行类似的操作:values(CAST(NEWID()as VARCHAR(MAX)),2user592704:如果您在字段中插入一个36字节长的GUID,它应该(a)是uniqueidentifier(这是“本机的”)GUID的数据类型),或者(b)如果它必须是字符串,它绝对不应该是
VARCHAR(MAX)
-
VARCHAR(36)
也一样好@marc_s-如果你只存储一个GUID,并且,正如你所说,如果你必须将它存储为字符串,那么有一次我会使用
char
over
varchar
@Damien_,不信者:好的一点,因为它总是有36个字符长,所以让它成为
varchar
是没有意义的。我通常只对x使用
CHAR(x)
,它可以作为调用“selectnewid()asguid”的函数吗?@user592704:请参阅其他答案。如果您只想将一个新的guid值放入一列中,那么这就行了。我以为你在做更复杂的事情。如果你想把它作为一个函数调用,正如我在回答中所说的,你不能用存储过程来实现。是的,我想用一个函数来获取@code值,但我没有做到。。。它似乎是一个返回的表或是一个错误invoked@user592704:您必须使用INSERT/EXEC--如果您需要在值进入物理表之前对其执行操作,您可以在表变量中执行INSERT/EXEC:我确实使用INSERT和EXEC,但我希望通过函数调用获取AS GUID。。。例如:@code=guid\u fn()是否可以作为调用“select newid()as guid”的函数?@user592704:查看其他答案。如果您只想将一个新的guid值放入一列中,那么这就行了。我以为你在做更复杂的事情。如果你想把它作为一个函数调用,正如我在回答中所说的,你不能用存储过程来实现。是的,我想用一个函数来获取@code值,但我没有做到。。。它似乎是一个返回的表或是一个错误invoked@user592704:您必须使用INSERT/EXEC--如果您需要在值进入物理表之前对其执行操作,您可以在表变量中执行INSERT/EXEC:我确实使用INSERT和EXEC,但我希望通过函数调用获取AS GUID。。。例如:@code=guid_fn()
DECLARE @code VARCHAR(MAX)
SET @code=(SELECT NEWID() AS GUID)
INSERT INTO TABLEA(CODE)
VALUES(@code)