kat*_*roh 4 sql t-sql sql-server stored-procedures sql-server-2008
我有一个存储过程,它返回一个对象的所有字段.
CREATE PROCEDURE getCustomer
(
@CustomerId int OUTPUT
)
AS
BEGIN
SELECT @CustomerId=CustomerId,FirstName,LastName FROM Customers
END
Run Code Online (Sandbox Code Playgroud)
我希望能够将对象的id作为输出参数返回,以便另一个sproc可以使用它.我在这个例子中得到这个错误:
A SELECT statement that assigns a value to a variable must not be combined with
data-retrieval operations.
CREATE PROCEDURE getCustomer_and_more
AS
BEGIN
DECLARE @CustomerId int
EXEC getCustomer @CustomerId OUTPUT
-- call another sproc that requires this @CustomerId
END
Run Code Online (Sandbox Code Playgroud)
当您的SELECT语句指定变量值时,SELECT中的所有字段都必须分配给局部变量.
将您的SPROC更改为
CREATE PROCEDURE getCustomer
(
@CustomerId int OUTPUT
)
AS
BEGIN
DECLARE @FirstName VARCHAR(50)
DECLARE @LastName VARCHAR(50)
SELECT @CustomerId=CustomerId, @FirstName = FirstName, @LastName =LastName
FROM Customers
Run Code Online (Sandbox Code Playgroud)
您不必使用它们变量,但必须以这种方式分配它们.
您的BETTER选项是删除字段.如果不需要它们,请不要费心选择它们.
[编辑]回复您的评论
因此,您可以通过拆分变量的分配并选择其他字段来执行您要执行的操作,如下所示:
CREATE PROCEDURE getCustomer
(
@CustomerId int OUTPUT
)
AS
BEGIN
SELECT @CustomerId=CustomerId FROM Customers
SELECT FirstName, LastName, {A_BUNCH_OF_OTHER_FIELDS}
FROM
Customers
Run Code Online (Sandbox Code Playgroud)
这将允许您获取输出参数并选择所有其他数据,而无需为每个字段定义参数.你必须权衡易用性(不必定义很多本地变量)与性能(必须运行两个语句而不是一个语句).然而,这似乎有点奇怪.
我不太清楚你是否需要getCustomer_and_more中可用的GetCustomer sproc中的其他值.如果你这样做,那么是的,你必须为你需要的每个值定义OUTPUT参数