SQL Server 2005 テーブルにデータを挿入するために使用したストアド プロシージャがあります。一部のデータは、別のテーブルに格納されているクエリの実行結果から取得する必要があります。
私が常に直面している主な問題は、返されたクエリを適切に実行できないことです。過去数日間、読んだ他の投稿に基づいていくつかの関数を作成しようとしましたが、exec、execute、sp_executesql などで sql エラーが発生し続けています。
私の環境を複製するために使用できるいくつかのスクリプトを貼り付けます。ストアド プロシージャの挿入関数内で使用するために、返されたクエリを実行する実際のコード サンプルを誰かが提供してくれることを願っています。
ありがとうございました!!!
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