0

我曾尝试使用带有复杂 sql 命令的 insert into 语句。我有两个错误:

在这种情况下不允许子查询。只允许使用标量表达式。”和“')' 附近的语法不正确

该声明:

Insert into 
[TestSystem2].[dbo].[Test_Software_Mandant_Status] ([SW_IDN], [Mandant_IDN],
Software_Status], [UserName], [TimeStamp])
values
(15000, 9999,
  (SELECT [Software_Status] 
  FROM [TestSystem2].[dbo].[Test_Software_Status] 
  WHERE [Software_Status_Kennzeichen] = 'S' and [Software_Status_Text] = 'Test'),
testuser,
SELECT GETDATE())

我在其他地方使用了类似的结构化更新命令,该命令有效。我不喜欢为此插入使用变量,任何人都可以帮我解决这个问题吗?

4

2 回答 2

1

试试这个:

Insert into [TestSystem2].[dbo].[Test_Software_Mandant_Status] ([SW_IDN], 
                                                               [Mandant_IDN],
                                                               [Software_Status],
                                                               [UserName],
                                                               [TimeStamp])
SELECT 15000, 
       9999, 
       [Software_Status], 
       testuser, 
       GETDATE()
FROM [TestSystem2].[dbo].[Test_Software_Status] 
WHERE [Software_Status_Kennzeichen] = 'S' 
  and [Software_Status_Text] = 'Test',
于 2013-07-04T14:51:52.270 回答
0

我个人会使用一个变量,它会使查询看起来更干净。

DECLARE @SoftwareStatus VARCHAR(100)

SELECT @SoftwareStatus = SELECT TOP 1 [Software_Status] 
  FROM [TestSystem2].[dbo].[Test_Software_Status] 
  WHERE [Software_Status_Kennzeichen] = 'S' and [Software_Status_Text] = 'Test')

然后你的INSERT

INSERT INTO
[TestSystem2].[dbo].[Test_Software_Mandant_Status] 
([SW_IDN], [Mandant_IDN], Software_Status], [UserName], [TimeStamp])
VALUES
(15000, 9999, @SoftwareStatus, 'testuser', GETDATE())

注意GETDATE()不需要它自己的SELECT

于 2013-07-04T14:51:04.250 回答