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

SQL Server insert based on the execution results of a stored procedure

本问题已经有最佳答案,请猛点这里访问。

我有一个有两列的表变量。第一列是我在执行存储过程填充第二个值时尝试填充的值。

1
2
3
4
5
6
7
8
9
10
11
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

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

Level 15, State 1, Procedure userProfiles, Line 9
[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near 'userprofile'.

任何帮助都将不胜感激。

提前谢谢


可能你的SPselect声明,

请参见:SQL Server-从存储过程中选择

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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参数。

下面是一个关于out参数的例子。https://technet.microsoft.com/en-us/library/ms187004(v=sql.105).aspx


我猜你需要用分号来结束你的陈述。

声明@local_变量(Transact-SQL)

1
2
3
4
5
DECLARE @MyTableVar TABLE(
    EmpID INT NOT NULL,
    OldVacationHours INT,
    NewVacationHours INT,
    ModifiedDate datetime);