Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用sql存储过程插入从存储在表中的查询返回的数据_Sql_Sql Server_Sql Function - Fatal编程技术网

使用sql存储过程插入从存储在表中的查询返回的数据

使用sql存储过程插入从存储在表中的查询返回的数据,sql,sql-server,sql-function,Sql,Sql Server,Sql Function,sql server 2005 我有一个存储过程,用于将数据插入表中。一些数据需要来自执行存储在单独表中的查询的结果 我一直遇到的主要问题是无法正确执行返回的查询。在过去的几天里,我在阅读其他文章的基础上尝试创建了几个函数,但我一直在使用exec、execute、sp_executesql等来处理sql错误 我将粘贴几个脚本,您可以使用它们来复制我的环境。我希望有人能提供一个实际的代码示例,它将执行返回的查询,以便在存储的proc insert函数中使用 谢谢你 CREATE TABLE

sql server 2005 我有一个存储过程,用于将数据插入表中。一些数据需要来自执行存储在单独表中的查询的结果

我一直遇到的主要问题是无法正确执行返回的查询。在过去的几天里,我在阅读其他文章的基础上尝试创建了几个函数,但我一直在使用exec、execute、sp_executesql等来处理sql错误

我将粘贴几个脚本,您可以使用它们来复制我的环境。我希望有人能提供一个实际的代码示例,它将执行返回的查询,以便在存储的proc insert函数中使用

谢谢你

    CREATE TABLE [dbo].[CLIENT](
    [cli_id] [int] IDENTITY(1,1) NOT NULL,
    [cli_first_name] [varchar](100) NULL,

 CONSTRAINT [PK__CLIENT__07F6335A] PRIMARY KEY CLUSTERED 
(
    [cli_id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO


INSERT INTO CLIENT (cli_first_name, cli_last_name) values ('tom', 'smith');
go



CREATE TABLE [dbo].[ASSESSMENT_DATALABEL_LIST](
    [adl_ID] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](50) NOT NULL,
    [BoundName] [nvarchar](50) NOT NULL,
    [Query] [ntext] NOT NULL,
    [KeyFieldName] [nvarchar](50) NOT NULL,
    [Status] [nvarchar](20) NOT NULL,
 CONSTRAINT [PK_ASSESSMENT_DATALABEL_LIST] PRIMARY KEY CLUSTERED 
(
    [adl_ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

INSERT INTO ASSESSMENT_DATALABEL_LIST (Name, BoundName, Query, KeyFieldName, Status) 
values ('Name, First', 'cli_first_name', 'select IsNull(cli_first_name,'''') as cli_first_name FROM CLIENT WHERE cli_id = @KeyFieldValue', 'cli_ID', 'Active')
go

INSERT INTO ASSESSMENT_DATALABEL_LIST (Name, BoundName, Query, KeyFieldName, Status) 
values ('Name, Last', 'cli_last_name', 'select IsNull(cli_last_name,'''') as cli_last_name FROM CLIENT WHERE cli_id = @KeyFieldValue', 'cli_ID', 'Active')
go


CREATE TABLE [dbo].[Item_Source]
(   
    [Item_ID] [int] IDENTITY(1,1) NOT NULL,
    [ItemType] [nvarchar](50) NOT NULL,
    [ItemCaption] [nvarchar] (50) NULL,
      [adl_ID] [int] NOT NULL
)
go

INSERT INTO Item_Source
(ItemType, ItemCaption, adl_ID) values 
('DATALABEL', 'First Name',1)
go

INSERT INTO Item_Source
(ItemType, ItemCaption, adl_ID) values 
('DATALABEL', 'Last Name',2)
go

CREATE TABLE [dbo].[Item_Destination]
(
    [ItemType] [nvarchar](50) NOT NULL,
    [ItemCaption] [nvarchar] (50) NULL,
      [ItemValue] [nvarchar](50) NULL
)
go


CREATE PROCEDURE [dbo].[spInsertStuff]

@cli_id int

AS

INSERT INTO Item_Destination
(ItemType, ItemCaption, ItemValue)
SELECT
ItemType, ItemCaption, [[[ VALUE OF EXECUTED QUERY FROM ADL TABLE --- dbo.FunctionToGetResultsOfStoredQuery(Item_Source.adl_id, @cli_id) ]]]
FROM Item_Source WHERE Item_Source.Item_ID IN (1,2)

-- this insert will insert both Item_Source rows into Item_Dest with one call.  The first row should have an ItemValue of Tom, the second row should have an ItemValue of Smith
GO
你可以查一下

存储过程的代码为:

CREATE PROCEDURE [dbo].[spInsertStuff]

@cli_id int

AS


DECLARE @SQL AS VARCHAR(MAX)
DECLARE @ADL_ID AS INT

DECLARE MyCURSOR
CURSOR FOR 
SELECT QUERY, ADL_ID FROM ASSESSMENT_DATALABEL_LIST

OPEN MyCURSOR   
FETCH NEXT FROM MyCURSOR INTO @SQL, @ADL_ID   

WHILE @@FETCH_STATUS = 0   
BEGIN   

        SET @SQL = REPLACE(@SQL,'@KeyFieldValue',@cli_id)
        DECLARE @Temp AS TABLE ([Value] [nvarchar](50))

        INSERT INTO @Temp
        EXEC (@SQL)

        INSERT INTO Item_Destination
        (ItemType, ItemCaption, ItemValue)
        SELECT
        ItemType, ItemCaption, (SELECT [Value] FROM @Temp)
        FROM Item_Source 
        WHERE Item_Source.adl_ID = @ADL_ID   

        DELETE FROM @Temp

        FETCH NEXT FROM MyCURSOR INTO @SQL, @ADL_ID   
END   

CLOSE MyCURSOR   
DEALLOCATE MyCURSOR

GO

INSERT dbo.SomeTable(SomeColumn)从dbo.OtherTable中选择SomeColumn,其中我们应该如何处理@KeyFieldValue?对不起,谢谢您的提问!@KeyFieldValue将是@cli_id,它将被传递到spInsertStuff proc。新代码将随您而来非常感谢,这看起来是一个很好的开始,但我遇到了一个问题。很抱歉,我应该将我的问题发布到包含多个字段的某个表中。我已经编辑了我的帖子,现在它有两个字段。一个字段应该包含从存储查询返回的值,另一个字段可以包含任何内容。当我试图修改您的解决方案以适应第二个字段时,exec调用中出现语法错误。再次感谢您的帮助:)该字段的值是多少?请参阅我编辑的解决方案。很抱歉造成混淆。我试图简化我原来的帖子,因为我希望答案是某种函数,我可以自己插入到我的环境中。我错了。您提供的解决方案确实符合我的问题,但并不完全满足我的需要。很抱歉浪费您的时间,再次感谢您提供的更多帮助。我真正需要的是在一个调用中进行多个插入,使用返回的查询值作为字段之一,例如插入到SomeTable(SomeField,SomeOtherField)选择[返回的查询值],othertable.id位于(1,2,3,4,5)中的othertable中的othertable.field