同时使用SELECT和VALUES INSERT到表

时间:2018-01-25 13:28:26

标签: sql sql-server insert

如何以不同的方式使用值插入表格?最好没有临时表。下面是我的存储过程代码,但我在插入

时出错
CREATE PROCEDURE setBARS
-- Add the parameters for the stored procedure here
@BUSINESSAREANAME nvarchar(50),
@STAFFNAME nvarchar(50),
@ROLENAME nvarchar(50),
@BARSSTARTDATE date,
@BARSENDDATE date
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
WITH t1 (BUSINESSAREAID) AS (SELECT BUSINESSAREAID FROM BUSINESSAREA WHERE BUSINESSAREANAME = @BUSINESSAREANAME),
t2 (STAFFID) AS (SELECT STAFFID FROM STAFF WHERE STAFFNAME = @STAFFNAME),
t3 (ROLEID) AS (SELECT ROLEID FROM ROLE WHERE ROLENAME = @ROLENAME)

INSERT INTO BARS ([BUSINESSAREAID],[STAFFID],[ROLEID],[BARSSTARTDATE],[BARSENDDATE])    
VALUES ((SELECT t1.BUSINESSAREAID, t2.STAFFID, t3.ROLEID FROM t1,t2,t3), @BARSSTARTDATE, @BARSENDDATE)


END
GO

3 个答案:

答案 0 :(得分:1)

您应该能够直接在SELECT语句中包含这些值:

INSERT INTO [BARS]
(
    [BUSINESSAREAID]
  , [STAFFID]
  , [ROLEID]
  , [BARSSTARTDATE]
  , [BARSENDDATE]
)
       SELECT 
           [t1].[BUSINESSAREAID]
         , [t2].[STAFFID]
         , [t3].[ROLEID]
         , @BARSSTARTDATE
         , @BARSENDDATE
       FROM [t1]
          , [t2]
          , [t3];

答案 1 :(得分:0)

试试这个

insert into bars([BUSINESSAREAID],[STAFFID],[ROLEID],[BARSSTARTDATE][BARSENDDATE]) 
    SELECT t1.BUSINESSAREAID, t2.STAFFID, t3.ROLEID FROM t1,t2,t3, @BARSSTARTDATE, @BARSENDDATE

答案 2 :(得分:0)

为什么不将所有值放在变量上,例如;

宣布@ val1 设置@ val1 =(从t1中选择前1个businessareaid)

声明@ val2 设置@ val1 =(从t2中选择前1名staffid)

插入栏(val1,val2) 选择@ val1,@ val2