SQL Select In Select for insert 语句

SQL Select In Select for insert Stement

我想知道该声明有什么问题。

INSERT INTO Table1(Myname,category ) 
 SELECT TOP 1 thenames
FROM tNames
 WHERE DateAdded > DATEADD(Day, -10, GETDATE() 
ORDER BY NEWID(),@ccategory)

我想从 table tnames 中选择一个随机值并将其放入 table 1 中,其中包含我从 SP 获得的类别值。 我应该怎么做?

编辑: 我在 MS SQL 服务器上工作。 完整代码:

Create PROCEDURE [dbo].[Names_SP] 
@CCategory nvarchar(50)

AS

BEGIN
    INSERT INTO Table1(Myname,category ) 
     SELECT TOP 1 thenames
    FROM tNames
     WHERE DateAdded > DATEADD(Day, -10, GETDATE() 
    ORDER BY NEWID(),@ccategory)
END

当我打电话给 SP 时,我会发送@ccategory。由于 table 1 有 2 列(第一列是类别),我想从 tname table 中随机获取第二列(myname)列值(在 10 天内添加的名称)。

您正在从 Select 语句中选择一列,并且在插入语句中指定了两列

INSERT INTO Table1(Myname) 
 SELECT TOP 1 thenames
FROM tNames
 WHERE DateAdded > DATEADD(Day, -10, GETDATE() 
ORDER BY NEWID(),@ccategory)

您必须 select 插入语句中写入的确切值。像这样:-

INSERT INTO Table1(Myname,category ) 
SELECT TOP 1 thenames, Category_value
FROM tNames
WHERE DateAdded > DATEADD(Day, -10, GETDATE())
ORDER BY NEWID(),@ccategory

您有 2 列要插入(我的名字,类别) 但是您的 select 列表只包含 1 列! (名字)

“@category”呢?至少在您发布的代码中,此变量从未声明或分配...

也许你应该这样做:

DECLARE  @category varchar(20)
SET @category = 'some cat.'    

INSERT INTO Table1(Myname,category)
    SELECT TOP 1 thenames,@category
    FROM tNames
    WHERE DateAdded > DATEADD(Day, -10, GETDATE())
    ORDER BY NEWID() 
INSERT INTO Table1(Myname,category ) 
 SELECT TOP 1 thenames,@ccategory
FROM tNames
 WHERE DateAdded > DATEADD(Day, -10, GETDATE() ORDER BY NEWID(),@ccategory)

您应该传递插入和 select 语句的相同参数组合