SQL Server基于存储过程的执行结果插入

时间:2015-08-12 04:55:39

标签: sql sql-server sql-server-2008

我有一个包含两列的表变量。第一列是我试图填充的值,而第二个值是由执行存储过程填充的。

CREATE PROCEDURE [dbo].userProfiles
   (@userID INT) AS
BEGIN
    DECLARE @sampleTable TABLE (moduleName VARCHAR(20),
                                userProfile int)

    INSERT INTO @sampleTable('userprofile', exec getUserProfile(@userID))

    SELECT *
        FROM @sampleTable
END

但是,每当我尝试执行存储过程时,我都会收到此错误:

  

15级,状态1,程序userProfiles,第9行
  [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]&user;用户配置文件'附近的语法不正确。

任何帮助都将受到赞赏。

提前致谢

3 个答案:

答案 0 :(得分:2)

可能您的SP确实有select声明,

请参阅:SQL Server - SELECT FROM stored procedure

CREATE PROCEDURE [dbo].userProfiles(
    @userID INT
) AS
BEGIN
    DECLARE @sampleTable TABLE (
        moduleName VARCHAR(20),
        userProfile int
    )

    DECLARE @stored_proc_table TABLE (
        clmn datatype --similar as result set from getUserProfile
    )

    insert into @stored_proc_table exec getUserProfile(@userID)


    INSERT INTO @sampleTable 
    select 'userprofile', clmn from @stored_proc_table;

    SELECT * FROM @sampleTable
END

答案 1 :(得分:0)

我的猜测是你需要以分号;

结束你的陈述

DECLARE @local_variable (Transact-SQL)

DECLARE @MyTableVar table(
    EmpID int NOT NULL,
    OldVacationHours int,
    NewVacationHours int,
    ModifiedDate datetime);

答案 2 :(得分:0)

缺少价值观。另外,考虑使用out参数从程序中获取值。

CREATE PROCEDURE [dbo].userProfiles(
    @userID INT) AS
    BEGIN
        DECLARE @sampleTable TABLE(
            moduleName VARCHAR(20),
            userProfile int)

       Create table #valueholder(resultvalue int)
        insert into #valueholder exec getUserProfile(@userID)
        INSERT
          INTO @sampleTable 
select 'userprofile',resultvalue  from #valueholder

        SELECT *
          FROM @sampleTable
    END

此外,您无法对过程进行内联调用。使用参数。

这是关于out param的示例。 https://technet.microsoft.com/en-us/library/ms187004(v=sql.105).aspx