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/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 执行过程时变量输出为空_Sql_Sql Server_Sql Server 2008 R2 - Fatal编程技术网

Sql 执行过程时变量输出为空

Sql 执行过程时变量输出为空,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,我声明了一个变量,并希望通过select查询设置它的值 我有一张桌子: fileNameGenerator ------------------- (pk)fileSymbol | bc 以下是我的程序: alter procedure bcSymbol ( @bc decimal(18,15) ) AS /* SET NOCOUNT ON */ Declare @bcSymbol varchar(50) Select @bcSymbol = (SELECT fileSymbol From f

我声明了一个变量,并希望通过select查询设置它的值

我有一张桌子:

fileNameGenerator
-------------------
(pk)fileSymbol | bc
以下是我的程序:

alter procedure bcSymbol
(
@bc decimal(18,15)
)
AS
/* SET NOCOUNT ON */
Declare @bcSymbol varchar(50)
Select @bcSymbol = (SELECT fileSymbol From fileNameGenerator WHERE bc = @bc)
RETURN
出于某种原因,这是我得到的输出

运行[dbo].[bcSymbol]@bc=8.550000000000000我得到:


我不明白为什么我没有找回正确的符号。我从表本身复制了bc值。根据表,输出应该是1。

您所做的一切都是分配了一个变量。您尚未在输出参数中选择或使用它。类似地,如果您这样做,您希望输出是什么?没有输出

DECLARE @x INT = 1;
也许你本想这么做:

ALTER PROCEDURE dbo.bcSymbol -- schema prefix, always
  @bc decimal(18,15),
  @bcSymbol VARCHAR(50) = NULL OUTPUT
AS
BEGIN
  SET NOCOUNT ON; -- why did you comment this out?

  SELECT @bcSymbol = fileSymbol
    FROM dbo.fileNameGenerator -- again, schema prefix
    WHERE bc = @bc;
END
GO
现在你可以这样称呼它:

DECLARE @bcSymbol VARCHAR(50);
EXEC dbo.bcSymbol @bc = 8.550000000000000, @bcSymbol = @bcSymbol OUTPUT;
PRINT @bcSymbol;
这不能处理bc列中存在多个相同值的情况。如果两行与WHERE子句匹配,您希望为变量指定哪一行?请不要说第一个或最后一个,因为没有这样的事情,除非你有非常具体的标准

如果您的客户机准备好接收输出中的多行,则有一些更简单的方法可以做到这一点,这种方法可以消除问题,但它们的开销更大,例如,您可以直接选择,而不必考虑任何变量:

ALTER PROCEDURE dbo.bcSymbol -- schema prefix, always
  @bc decimal(18,15)
AS
BEGIN
  SET NOCOUNT ON; -- why did you comment this out?

  SELECT bcSymbol = fileSymbol
    FROM dbo.fileNameGenerator -- again, schema prefix
    WHERE bc = @bc;
END
GO
然后调用更简单,但更复杂一些,比如说,C:

EXEC dbo.bcSymbol @bc = 8.550000000000000;

和。

您所做的一切都是分配了一个变量。您尚未在输出参数中选择或使用它。类似地,如果您这样做,您希望输出是什么?没有输出

DECLARE @x INT = 1;
也许你本想这么做:

ALTER PROCEDURE dbo.bcSymbol -- schema prefix, always
  @bc decimal(18,15),
  @bcSymbol VARCHAR(50) = NULL OUTPUT
AS
BEGIN
  SET NOCOUNT ON; -- why did you comment this out?

  SELECT @bcSymbol = fileSymbol
    FROM dbo.fileNameGenerator -- again, schema prefix
    WHERE bc = @bc;
END
GO
现在你可以这样称呼它:

DECLARE @bcSymbol VARCHAR(50);
EXEC dbo.bcSymbol @bc = 8.550000000000000, @bcSymbol = @bcSymbol OUTPUT;
PRINT @bcSymbol;
这不能处理bc列中存在多个相同值的情况。如果两行与WHERE子句匹配,您希望为变量指定哪一行?请不要说第一个或最后一个,因为没有这样的事情,除非你有非常具体的标准

如果您的客户机准备好接收输出中的多行,则有一些更简单的方法可以做到这一点,这种方法可以消除问题,但它们的开销更大,例如,您可以直接选择,而不必考虑任何变量:

ALTER PROCEDURE dbo.bcSymbol -- schema prefix, always
  @bc decimal(18,15)
AS
BEGIN
  SET NOCOUNT ON; -- why did you comment this out?

  SELECT bcSymbol = fileSymbol
    FROM dbo.fileNameGenerator -- again, schema prefix
    WHERE bc = @bc;
END
GO
然后调用更简单,但更复杂一些,比如说,C:

EXEC dbo.bcSymbol @bc = 8.550000000000000;

还有。

对此表示抱歉。sql server 2008对此表示抱歉。非常感谢sql server 2008。我们使用几个变量生成文件名,所有变量都是唯一的,它们共享的唯一键是symbols列。例如,如果我有一个表:fileSymbol | bc | var1 | var2…等等,那么文件名是bcsybol+var1symbol+var2symbol。。。有锯齿的绳子。我希望以字符串形式返回该文件名,我有8个变量。@user2369145这听起来非常像您希望在应用程序层而不是T-SQL中执行的操作。这是一个范围渐变的问题,本质上是,为什么分配一个变量不会导致任何输出?对此我很抱歉。我的工具有点有限,现在我只想让它正常工作。文件名是用与excel中类似的vlookups生成的,我正试图保持命名逻辑的相似性。我所能想到的最直接的方法是在一场狂欢中。我已经尝试根据您的建议进行一些更改…现在它要求输入输出参数。过程或函数“test”需要参数“@outputVal”,但未提供该参数。@user2369145我无法调试您描述模糊的代码,抱歉。我的例子很有效。在你开始改变它并使它变得更复杂之前,让它工作起来。非常感谢。我们使用几个变量生成文件名,所有变量都是唯一的,它们共享的唯一键是symbols列。例如,如果我有一个表:fileSymbol | bc | var1 | var2…等等,那么文件名是bcsybol+var1symbol+var2symbol。。。有锯齿的绳子。我希望以字符串形式返回该文件名,我有8个变量。@user2369145这听起来非常像您希望在应用程序层而不是T-SQL中执行的操作。这是一个范围渐变的问题,本质上是,为什么分配一个变量不会导致任何输出?对此我很抱歉。我的工具有点有限,现在我只想让它正常工作。文件名是用与excel中类似的vlookups生成的,我正试图保持命名逻辑的相似性。我所能想到的最直接的方法是在一场狂欢中。我已经尝试根据您的建议进行一些更改…现在它要求输入输出参数。过程或函数“test”需要参数“@outputVal”,但未提供该参数。@user2369145我无法调试您描述模糊的代码,抱歉。我的例子很有效。在你开始改变它并使它变得更复杂之前,让它工作起来。