【问题标题】:Using EXEC command as INSERT VALUE in SQL在 SQL 中使用 EXEC 命令作为 INSERT VALUE
【发布时间】:2013-07-21 08:16:59
【问题描述】:

我希望能够做这样的事情: 我的存储过程将始终返回一个数字(tinyint)

INSERT INTO CustomerSelections
           ([draw_date]
           ,[val1]
           ,[val2]
           ,[val3]
           ,[val4]
           ,[val5]
           ,[val6])
     VALUES
           (
           '2013-07-05'
           ,EXEC GenerateRandomNumbers 1, 49, 1, 0
           ,EXEC GenerateRandomNumbers 1, 49, 1, 0
           ,EXEC GenerateRandomNumbers 1, 49, 1, 0
           ,EXEC GenerateRandomNumbers 1, 49, 1, 0
           ,EXEC GenerateRandomNumbers 1, 49, 1, 0
           ,EXEC GenerateRandomNumbers 1, 49, 1, 0
           )

但我不知道如何获取其中的值?

更新: 我尝试过这样的事情:

我将传递的值放入一个名为的存储过程中:

ALTER PROCEDURE [dbo].[GetUniqueLottoNumber] 

AS
BEGIN

DECLARE @return_value int

EXEC    @return_value = [dbo].[GenerateRandomNumbers]
        @StartNumber = 1,
        @EndNumber = 49,
        @QuantityToOutput = 1,
        @AllowDuplicates = 0

END

然后这样做:

CREATE TABLE #tmp (Number TINYINT)
DECLARE @q nvarchar(4000)
DECLARE @return_value int
SET @q = 'EXEC  @return_value = [dbo].[GetUniqueLottoNumber]';

INSERT INTO  #tmp (Number)
EXEC sp_executesql @q

但是当我将@q 放在插入值中时它不喜欢它。

【问题讨论】:

  • GenerateRandomNumbers 应该是一个函数,而不是一个存储过程。那么这个问题几乎会自行解决。问题是您没有显示存储过程的代码,所以我们无法重写您的代码

标签: sql sql-server sql-server-2008 tsql sql-insert


【解决方案1】:

为什么需要调用该过程 6 次?为什么不能用你想要多少响应的参数来调用SP?

无论如何尝试这样的事情。

DECLARE @val1 INT
DECLARE @val2 INT
DECLARE @val3 INT 
DECLARE @val4 INT 
DECLARE @val5 INT 
DECLARE @val6 INT 

EXEC @val1 = GenerateRandomNumbers 1, 49, 1, 0
EXEC @val2 = GenerateRandomNumbers 1, 49, 1, 0
EXEC @val3 = GenerateRandomNumbers 1, 49, 1, 0
EXEC @val4 = GenerateRandomNumbers 1, 49, 1, 0
EXEC @val5 = GenerateRandomNumbers 1, 49, 1, 0
EXEC @val6 = GenerateRandomNumbers 1, 49, 1, 0
INSERT INTO CustomerSelections
           ([draw_date]
           ,[val1]
           ,[val2]
           ,[val3]
           ,[val4]
           ,[val5]
           ,[val6])
     VALUES
           (
           '2013-07-05'
           ,@val1
           ,@val2
           ,@val3
           ,@val4
           ,@val5
           ,@val6
           )

【讨论】:

    【解决方案2】:

    首先,您应该声明一些参数,然后将这些变量传递给每个 exec 语句,然后在插入语句中使用这些变量。您可以点击以下链接了解详情。

    Set return value of a stored procedure to a variable

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-17
      • 2011-08-03
      • 2013-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多