ストアドプロシージャの結果を一時テーブルに挿入します

1639
Ferdeen 2009-03-18 00:45.

どうすればよいSELECT * INTO [temp table] FROM [stored procedure]ですか?ではないFROM [Table]と定義しませんか[temp table]

SelectBusinessLineintoからのすべてのデータはtmpBusLine正常に機能します。

select *
into tmpBusLine
from BusinessLine

私は同じことを試みてstored procedureいますが、データを返すを使用することはまったく同じではありません。

select *
into tmpBusLine
from
exec getBusinessLineHistory '16 Mar 2009'

出力メッセージ:

メッセージ156、レベル15、状態1、行2キーワード「exec」の近くの構文が正しくありません。

出力ストアドプロシージャと同じ構造で一時テーブルを作成するいくつかの例を読みましたが、これは正常に機能しますが、列を指定しないと便利です。

29 answers

715
Aaron Alton 2009-08-05 05:27.

これにはOPENROWSETを使用できます。見てください。アドホック分散クエリがまだ有効になっていない場合に備えて、有効にするためのsp_configureコードも含めました。

CREATE PROC getBusinessLineHistory
AS
BEGIN
    SELECT * FROM sys.databases
END
GO

sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO

SELECT * INTO #MyTempTable FROM OPENROWSET('SQLNCLI', 'Server=(local)\SQL2008;Trusted_Connection=yes;',
     'EXEC getBusinessLineHistory')

SELECT * FROM #MyTempTable
649
Gavin 2009-03-18 04:08.

最初に一時テーブルを宣言せずにそれを実行したい場合は、ストアドプロシージャではなくユーザー定義関数を作成して、そのユーザー定義関数にテーブルを返すようにすることができます。または、ストアドプロシージャを使用する場合は、次のようにしてみてください。

CREATE TABLE #tmpBus
(
   COL1 INT,
   COL2 INT
)

INSERT INTO #tmpBus
Exec SpGetRecords 'Params'
303
Matt Hamilton 2009-03-18 00:50.

SQL Server 2005ではINSERT INTO ... EXEC、ストアドプロシージャの結果をテーブルに挿入するために使用できます。MSDNのINSERTドキュメントから(実際にはSQL Server 2000の場合):

--INSERT...EXECUTE procedure example
INSERT author_sales EXECUTE get_author_sales
198
Christian Loris 2009-08-05 07:11.

これはあなたの質問のわずかに修正されたバージョンへの答えです。ユーザー定義関数のストアドプロシージャの使用を中止できる場合は、インラインテーブル値のユーザー定義関数を使用できます。これは基本的に、結果セットとしてテーブルを返すストアドプロシージャ(パラメータを取ります)です。したがって、INTOステートメントでうまく配置されます。

ここでは良いことだ簡単な記事それと他のユーザー定義関数では。それでもストアドプロシージャが必要な場合は、インラインテーブル値のユーザー定義関数をストアドプロシージャでラップできます。ストアドプロシージャは、インラインテーブル値のユーザー定義関数からselect *を呼び出すときに、パラメータを渡すだけです。

したがって、たとえば、特定の地域の顧客のリストを取得するためのインラインテーブル値ユーザー定義関数があります。

CREATE FUNCTION CustomersByRegion 
(  
    @RegionID int  
)
RETURNS TABLE 
AS
RETURN 
  SELECT *
  FROM customers
  WHERE RegionID = @RegionID
GO

次に、この関数を呼び出して、次のような結果を取得できます。

SELECT * FROM CustomersbyRegion(1)

または、SELECT INTOを実行するには:

SELECT * INTO CustList FROM CustomersbyRegion(1)

それでもストアドプロシージャが必要な場合は、関数を次のようにラップします。

CREATE PROCEDURE uspCustomersByRegion 
(  
    @regionID int  
)
AS
BEGIN
     SELECT * FROM CustomersbyRegion(@regionID);
END
GO

これは、望ましい結果を得るための最も「ハックレス」な方法だと思います。追加の複雑さなしに使用することを目的として、既存の機能を使用します。ストアドプロシージャにインラインテーブル値のユーザー定義関数をネストすることにより、2つの方法で機能にアクセスできます。プラス!実際のSQLコードのメンテナンスポイントは1つだけです。

OPENROWSETの使用が提案されていますが、これはOPENROWSET関数の使用目的ではありません(Books Onlineから)。

OLEDBデータソースからリモートデータにアクセスするために必要なすべての接続情報が含まれます。この方法は、リンクサーバー内のテーブルにアクセスする代わりの方法であり、OLEDBを使用してリモートデータに接続してアクセスする1回限りのアドホックな方法です。OLE DBデータソースをより頻繁に参照するには、代わりにリンクサーバーを使用してください。

OPENROWSETを使用すると作業は完了しますが、ローカル接続を開いてデータをマーシャリングするための追加のオーバーヘッドが発生します。また、セキュリティリスクをもたらすアドホッククエリ権限が必要であり、したがって望ましくない場合があるため、すべての場合にオプションであるとは限りません。また、OPENROWSETアプローチでは、複数の結果セットを返すストアドプロシージャを使用できなくなります。複数のインラインテーブル値ユーザー定義関数を単一のストアドプロシージャでラップすると、これを実現できます。

133
Quassnoi 2009-03-18 00:50.
EXEC sp_serveroption 'YOURSERVERNAME', 'DATA ACCESS', TRUE

SELECT  *
INTO    #tmpTable
FROM    OPENQUERY(YOURSERVERNAME, 'EXEC db.schema.sproc 1')
128
Tigerjz32 2015-03-14 09:38.

最も簡単な解決策:

CREATE TABLE #temp (...);

INSERT INTO #temp
EXEC [sproc];

スキーマがわからない場合は、次のことができます。この方法には重大なセキュリティリスクがあることに注意してください。

SELECT * 
INTO #temp
FROM OPENROWSET('SQLNCLI', 
                'Server=localhost;Trusted_Connection=yes;', 
                'EXEC [db].[schema].[sproc]')
108
dotjoe 2009-03-18 04:06.

ストアドプロシージャが多数の列を返し、結果を保持するための一時テーブルを手動で「作成」したくない場合は、ストアドプロシージャに移動して、に「into」句を追加するのが最も簡単な方法であることがわかりました。最後のselectステートメントで、where句に1 = 0を追加します。

ストアドプロシージャを1回実行し、戻って、追加したSQLコードを削除します。これで、ストアドプロシージャの結果に一致する空のテーブルが作成されます。一時テーブルの「スクリプトテーブルを作成」​​するか、単にそのテーブルに直接挿入することができます。

68
nitin 2011-03-24 21:15.
declare @temp table
(
    name varchar(255),
    field varchar(255),
    filename varchar(255),
    filegroup varchar(255),
    size varchar(255),
    maxsize varchar(255),
    growth varchar(255),
    usage varchar(255)
);
INSERT @temp  Exec sp_helpfile;
select * from @temp;
50
FistOfFury 2012-08-01 07:09.

ストアドプロシージャの結果テーブルが複雑すぎて「createtable」ステートメントを手動で入力できない場合で、OPENQUERYまたはOPENROWSETを使用できない場合は、sp_helpを使用して列とデータ型のリストを生成できます。列のリストを取得したら、ニーズに合わせてフォーマットするだけです。

ステップ1:「into#temp」を出力クエリに追加します(例:「select [...] into #temp from [...]」)。

最も簡単な方法は、procで出力クエリを直接編集することです。ストアドプロシージャを変更できない場合は、コンテンツを新しいクエリウィンドウにコピーして、そこでクエリを変更できます。

ステップ2:一時テーブルでsp_helpを実行します。(例: "exec tempdb..sp_help #temp")

一時テーブルを作成した後、一時テーブルでsp_helpを実行して、varcharフィールドのサイズを含む列とデータ型のリストを取得します。

ステップ3:データの列とタイプをcreatetableステートメントにコピーします

sp_helpの出力を「テーブルの作成」ステートメントにフォーマットするために使用するExcelシートがあります。特別なものは必要ありません。SQLエディターにコピーして貼り付けるだけです。列名、サイズ、およびタイプを使用して、ストアドプロシージャの結果を挿入するために使用できる「Createtable#x [...]」または「declare @ xtable [...]」ステートメントを作成します。

ステップ4:新しく作成されたテーブルに挿入します

これで、このスレッドで説明されている他のソリューションと同様のクエリが作成されます。

DECLARE @t TABLE 
(
   --these columns were copied from sp_help
   COL1 INT,
   COL2 INT   
)

INSERT INTO @t 
Exec spMyProc 

この手法は、一時テーブル(#temp)をテーブル変数(@temp)に変換するためにも使用できます。これは、create tableステートメントを自分で作成するだけではない場合もありますが、大規模なプロセスでのタイプミスやデータ型の不一致などの手動エラーを防ぎます。タイプミスのデバッグは、最初にクエリを作成するよりも時間がかかる場合があります。

48
SO User 2009-08-06 21:28.

ストアドプロシージャはデータを取得するだけですか、それとも変更しますか?取得のみに使用する場合は、次のように、ストアドプロシージャを関数に変換し、宣言せずに共通テーブル式(CTE)を使用できます。

with temp as (
    select * from dbo.fnFunctionName(10, 20)
)
select col1, col2 from temp

ただし、CTEから取得する必要があるものはすべて、1つのステートメントでのみ使用する必要があります。with temp as ...数行のSQLの後で、を実行して使用しようとすることはできません。より複雑なクエリの場合、1つのステートメントに複数のCTEを含めることができます。

例えば、

with temp1020 as (
    select id from dbo.fnFunctionName(10, 20)
),
temp2030 as (
    select id from dbo.fnFunctionName(20, 30)
)
select * from temp1020 
where id not in (select id from temp2030)
37
StuartQ 2014-02-06 06:21.

OPENROWSETが問題を引き起こしている場合は、2012年以降に別の方法があります。ここで説明するように、sys.dm_exec_describe_first_result_set_for_objectを利用します。ストアドプロシージャの列名とタイプを取得しますか?

まず、次のストアドプロシージャを作成して、一時テーブルのSQLを生成します。

CREATE PROCEDURE dbo.usp_GetStoredProcTableDefinition(
    @ProcedureName  nvarchar(128),
    @TableName      nvarchar(128),
    @SQL            nvarchar(max) OUTPUT
)
AS
SET @SQL = 'CREATE TABLE ' + @tableName + ' ('

SELECT @SQL = @SQL + '['+name +'] '+ system_type_name +''  + ','
        FROM sys.dm_exec_describe_first_result_set_for_object
        (
          OBJECT_ID(@ProcedureName), 
          NULL
        );

--Remove trailing comma
SET @SQL = SUBSTRING(@SQL,0,LEN(@SQL))    
SET @SQL =  @SQL +')'

この手順を使用するには、次の方法で呼び出します。

DECLARE     @SQL    NVARCHAR(MAX)

exec dbo.usp_GetStoredProcTableDefinition
    @ProcedureName='dbo.usp_YourProcedure',
    @TableName='##YourGlobalTempTable',@SQL = @SQL OUTPUT

INSERT INTO ##YourGlobalTempTable
EXEC    [dbo].usp_YourProcedure

select * from ##YourGlobalTempTable

グローバル一時テーブルを使用していることに注意してください。これは、EXECを使用して動的SQLを実行すると独自のセッションが作成されるため、通常の一時テーブルは後続のコードの範囲外になるためです。グローバル一時テーブルに問題がある場合、通常の一時テーブルを使用できますが、後続のSQLは動的である必要があります。つまり、EXECステートメントによっても実行される必要があります。

32
Doug Lubey of Louisiana 2010-02-12 09:39.

Quassnoiは私をほとんどそこに置いてくれましたが、1つ欠けていました。

****ストアドプロシージャでパラメータを使用する必要がありました。****

そして、OPENQUERYはこれが起こることを許可しません:

そこで、システムを機能させる方法を見つけました。また、テーブル定義をそれほど厳密にする必要はなく、別のストアドプロシージャ内で再定義します(もちろん、壊れることもあります)。

はい。偽の変数でOPENQUERYステートメントを使用して、ストアドプロシージャから返されるテーブル定義を動的に作成できます(NO RESULT SETが、適切なデータを含むデータセットと同じ数のフィールドと同じ位置を返す限り)。

テーブルが作成されると、execストアドプロシージャを1日中一時テーブルに使用できます。


また、(上記のように)データアクセスを有効にする必要があることに注意してください。

EXEC sp_serveroption 'MYSERVERNAME', 'DATA ACCESS', TRUE

コード:

declare @locCompanyId varchar(8)
declare @locDateOne datetime
declare @locDateTwo datetime

set @locDateOne = '2/11/2010'
set @locDateTwo = getdate()

--Build temporary table (based on bogus variable values)
--because we just want the table definition and
--since openquery does not allow variable definitions...
--I am going to use bogus variables to get the table defintion.

select * into #tempCoAttendanceRpt20100211
FROM OPENQUERY(DBASESERVER,
  'EXEC DATABASE.dbo.Proc_MyStoredProc 1,"2/1/2010","2/15/2010 3:00 pm"')

set @locCompanyId = '7753231'

insert into #tempCoAttendanceRpt20100211
EXEC DATABASE.dbo.Proc_MyStoredProc @locCompanyId,@locDateOne,@locDateTwo

set @locCompanyId = '9872231'

insert into #tempCoAttendanceRpt20100211
EXEC DATABASE.dbo.Proc_MyStoredProc @locCompanyId,@locDateOne,@locDateTwo

select * from #tempCoAttendanceRpt20100211
drop table #tempCoAttendanceRpt20100211

元々提供された情報のためのおかげで...はい、最終的に私は、これらすべての偽作成する必要はありません別のストアドプロシージャまたはデータベースからのデータを使用している場合(厳密)テーブルdefintionsを、そしてはいあなたもパラメータを使用することができます。

参照タグの検索:

  • SQL2005ストアドプロシージャを一時テーブルに

  • ストアドプロシージャと変数を使用したopenquery2005

  • 変数を使用したopenquery

  • ストアドプロシージャを一時テーブルに実行する

更新:これは一時テーブルでは機能しないため、一時テーブルを手動で作成する必要がありました。

残念な通知:これは一時テーブルでは機能しません、http://www.sommarskog.se/share_data.html#OPENQUERY

参照:次は、LOCALSERVERを定義することです。例ではキーワードのように見えるかもしれませんが、実際には名前にすぎません。これはあなたがそれをする方法です:

sp_addlinkedserver @server = 'LOCALSERVER',  @srvproduct = '',
                   @provider = 'SQLOLEDB', @datasrc = @@servername

リンクサーバーを作成するには、ALTER ANY SERVER権限を持っているか、固定サーバーロールsysadminまたはsetupadminのメンバーである必要があります。

OPENQUERYは、SQLServerへの新しい接続を開きます。これにはいくつかの意味があります。

OPENQUERYを使用して呼び出すプロシージャーは、現在の接続で作成された一時表を参照できません。

新しい接続には独自のデフォルトデータベース(sp_addlinkedserverで定義され、デフォルトはマスター)があるため、すべてのオブジェクト仕様にデータベース名を含める必要があります。

開いているトランザクションがあり、OPENQUERYを呼び出すときにロックを保持している場合、呼び出されたプロシージャはロックしたものにアクセスできません。つまり、注意しないと自分をブロックしてしまいます。

接続は無料ではないため、パフォーマンスが低下します。

26
Sandeep Gaadhe 2016-02-27 01:05.

運が良ければSQL2012以降を使用できます。 dm_exec_describe_first_result_set_for_object

gotqnが提供するSQLを編集しました。gotqnに感謝します。

これにより、プロシージャ名と同じ名前のグローバル一時テーブルが作成されます。一時テーブルは、後で必要に応じて使用できます。再実行する前にドロップすることを忘れないでください。

    declare @procname nvarchar(255) = 'myProcedure',
            @sql nvarchar(max) 

    set @sql = 'create table ##' + @procname + ' ('
    begin
            select      @sql = @sql + '[' + r.name + '] ' +  r.system_type_name + ','
            from        sys.procedures AS p
            cross apply sys.dm_exec_describe_first_result_set_for_object(p.object_id, 0) AS r
            where       p.name = @procname

            set @sql = substring(@sql,1,len(@sql)-1) + ')'
            execute (@sql)
            execute('insert ##' + @procname + ' exec ' + @procname)
    end
23
satnhak 2011-09-27 06:04.

このストアドプロシージャは次の役割を果たします。

CREATE PROCEDURE [dbo].[ExecIntoTable]
(
    @tableName          NVARCHAR(256),
    @storedProcWithParameters   NVARCHAR(MAX)
)
AS
BEGIN
    DECLARE @driver         VARCHAR(10)
    DECLARE @connectionString   NVARCHAR(600)
    DECLARE @sql            NVARCHAR(MAX)
    DECLARE @rowsetSql      NVARCHAR(MAX)

    SET @driver = '''SQLNCLI'''

    SET @connectionString = 
        '''server=' + 
            CAST(SERVERPROPERTY('ServerName') AS NVARCHAR(256)) + 
            COALESCE('\' + CAST(SERVERPROPERTY('InstanceName') AS NVARCHAR(256)), '') + 
        ';trusted_connection=yes'''

    SET @rowsetSql = '''EXEC ' + REPLACE(@storedProcWithParameters, '''', '''''') + ''''

    SET @sql = '
SELECT
    *
INTO 
    ' + @tableName + ' 
FROM
    OPENROWSET(' + @driver + ',' + @connectionString + ',' + @rowsetSql + ')'

    EXEC (@sql)
END
GO

これは少し手直しです。実際に機能するように、ストアドプロシージャの結果をテーブルに挿入します。

一時テーブルで機能させたい場合は、##GLOBALテーブルを使用して後でドロップする必要があります。

17
gotqn 2015-06-04 01:47.

ストアドプロシージャの最初のレコードセットを一時テーブルに挿入するには、次のことを知っておく必要があります。

  1. ストアドプロシージャの最初の行セットのみを一時テーブルに挿入できます
  2. ストアドプロシージャは動的T-SQLステートメントを実行してはなりません(sp_executesql
  3. 最初に一時テーブルの構造を定義する必要があります

上記は制限のように見えるかもしれませんが、私見では完全に理にかなっています-使用しているsp_executesql場合は2列と10列を返すことができ、複数の結果セットがある場合はそれらを複数のテーブルに挿入することもできません-最大を挿入できます1つのT-SQLステートメントの2つのテーブル(OUTPUT句を使用し、トリガーを使用しない)。

したがって、問題は主に、EXEC ... INTO ...ステートメントを実行する前に一時テーブル構造を定義する方法です。

  • sys.dm_exec_describe_first_result_set_for_object
  • sys.dm_exec_describe_first_result_set
  • sp_describe_first_result_set

1つ目はで機能しOBJECT_ID、2つ目と3つ目はアドホッククエリでも機能します。CROSS APPLY複数のプロシージャの一時テーブル定義を同時に使用および構築できるため、spの代わりにDMVを使用することをお勧めします。

SELECT p.name, r.* 
FROM sys.procedures AS p
CROSS APPLY sys.dm_exec_describe_first_result_set_for_object(p.object_id, 0) AS r;

また、system_type_name非常に便利なフィールドに注意してください。列の完全な定義を格納します。例えば:

smalldatetime
nvarchar(max)
uniqueidentifier
nvarchar(1000)
real
smalldatetime
decimal(18,2)

ほとんどの場合、これを直接使用してテーブル定義を作成できます。

したがって、ほとんどの場合(ストアドプロシージャが特定の基準に一致する場合)、そのような問題を解決するための動的ステートメントを簡単に作成できると思います(一時テーブルを作成し、ストアドプロシージャの結果を挿入し、データで必要な処理を実行します)。 。


上記のオブジェクトは、動的T-SQLステートメントが実行されたり、ストアドプロシージャで一時テーブルが使用されたりする場合など、最初の結果セットデータを定義できない場合があることに注意してください。

16
Devansh 2013-10-05 18:03.
  1. 次のスキーマとデータを使用してテーブルを作成しています。

  2. ストアドプロシージャを作成します。

  3. これで、プロシージャの結果がわかったので、次のクエリを実行しています。

     CREATE TABLE [dbo].[tblTestingTree](
         [Id] [int] IDENTITY(1,1) NOT NULL,
         [ParentId] [int] NULL,
         [IsLeft] [bit] NULL,
         [IsRight] [bit] NULL,
     CONSTRAINT [PK_tblTestingTree] PRIMARY KEY CLUSTERED
     (
         [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]
     GO
     SET IDENTITY_INSERT [dbo].[tblTestingTree] ON
     INSERT [dbo].[tblTestingTree] ([Id], [ParentId], [IsLeft], [IsRight]) VALUES (1, NULL, NULL, NULL)
     INSERT [dbo].[tblTestingTree] ([Id], [ParentId], [IsLeft], [IsRight]) VALUES (2, 1, 1, NULL)
     INSERT [dbo].[tblTestingTree] ([Id], [ParentId], [IsLeft], [IsRight]) VALUES (3, 1, NULL, 1)
     INSERT [dbo].[tblTestingTree] ([Id], [ParentId], [IsLeft], [IsRight]) VALUES (4, 2, 1, NULL)
     INSERT [dbo].[tblTestingTree] ([Id], [ParentId], [IsLeft], [IsRight]) VALUES (5, 2, NULL, 1)
     INSERT [dbo].[tblTestingTree] ([Id], [ParentId], [IsLeft], [IsRight]) VALUES (6, 3, 1, NULL)
     INSERT [dbo].[tblTestingTree] ([Id], [ParentId], [IsLeft], [IsRight]) VALUES (7, 3, NULL, 1)
     INSERT [dbo].[tblTestingTree] ([Id], [ParentId], [IsLeft], [IsRight]) VALUES (8, 4, 1, NULL)
     INSERT [dbo].[tblTestingTree] ([Id], [ParentId], [IsLeft], [IsRight]) VALUES (9, 4, NULL, 1)
     INSERT [dbo].[tblTestingTree] ([Id], [ParentId], [IsLeft], [IsRight]) VALUES (10, 5, 1, NULL)
    
     SET IDENTITY_INSERT [dbo].[tblTestingTree] OFF
     VALUES (10, 5, 1, NULL)
     SET IDENTITY_INSERT [dbo].[tblTestingTree] On
    
    
     create procedure GetDate
     as
     begin
         select Id,ParentId from tblTestingTree
     end
    
     create table tbltemp
     (
         id int,
         ParentId int
     )
     insert into tbltemp
     exec GetDate
    
     select * from tbltemp;
    
15
ProblemSolver 2015-09-08 01:37.

クエリにパラメータが含まれていない場合は、OpenQueryelseuseを使用しますOpenRowset

基本的なことは、ストアドプロシージャに従ってスキーマを作成し、そのテーブルに挿入することです。例えば:

DECLARE @abc TABLE(
                  RequisitionTypeSourceTypeID INT
                , RequisitionTypeID INT
                , RequisitionSourcingTypeID INT
                , AutoDistOverride INT
                , AllowManagerToWithdrawDistributedReq INT
                , ResumeRequired INT
                , WarnSupplierOnDNRReqSubmission  INT
                , MSPApprovalReqd INT
                , EnableMSPSupplierCounterOffer INT
                , RequireVendorToAcceptOffer INT
                , UseCertification INT
                , UseCompetency INT
                , RequireRequisitionTemplate INT
                , CreatedByID INT
                , CreatedDate DATE
                , ModifiedByID INT
                , ModifiedDate DATE
                , UseCandidateScheduledHours INT
                , WeekEndingDayOfWeekID INT
                , AllowAutoEnroll INT
                )
INSERT INTO @abc
EXEC [dbo].[usp_MySp] 726,3
SELECT * FROM @abc
13
SoftwareARM 2011-03-11 08:30.

コード

CREATE TABLE #T1
(
    col1 INT NOT NULL,
    col2 NCHAR(50) NOT NULL,
    col3 TEXT NOT NULL,
    col4 DATETIME NULL,
    col5 NCHAR(50) NULL,
    col6 CHAR(2) NULL,
    col6 NCHAR(100) NULL,
    col7 INT NULL,
    col8 NCHAR(50) NULL,
    col9 DATETIME NULL,
    col10 DATETIME NULL
)

DECLARE @Para1 int
DECLARE @Para2 varchar(32)
DECLARE @Para3 varchar(100)
DECLARE @Para4 varchar(15)
DECLARE @Para5 varchar (12)
DECLARE @Para6 varchar(1)
DECLARE @Para7 varchar(1)


SET @Para1 = 1025
SET @Para2 = N'6as54fsd56f46sd4f65sd'
SET @Para3 = N'XXXX\UserName'
SET @Para4 = N'127.0.0.1'
SET @Para5 = N'XXXXXXX'
SET @Para6 = N'X'
SET @Para7 = N'X'

INSERT INTO #T1
(
    col1,
    col2,
    col3,
    col4,
    col5,
    col6,
    col6,
    col7,
    col8,
    col9,
    col10,
)
EXEC [dbo].[usp_ProcedureName] @Para1, @Para2, @Para3, @Para4, @Para5, @Para6, @Para6

これがお役に立てば幸いです。必要に応じて資格を取得してください。

11
kevchadders 2009-08-06 21:49.

私が見つかりました。ストアドプロシージャに配列/のDataTableを渡すあなたがあなたの問題を解決するに行くかもしれない方法で別のアイデアを与えるかもしれません。

リンクは、イメージタイプパラメータを使用してストアドプロシージャに渡すことを提案しています。次に、ストアドプロシージャで、画像が元のデータを含むテーブル変数に変換されます。

一時テーブルでこれを使用できる方法があるかもしれません。

10
zhongxiao37 2014-08-18 23:11.

私は同じ問題に遭遇しました、そしてこれは私がポールの提案からこれのためにしたことです。ここでの主な部分はNEWID()、複数のユーザーがストアプロシージャ/スクリプトを同時に実行しないようにするために使用することです。これは、グローバル一時テーブルの問題です。

DECLARE @sql varchar(max) = '', 
@tmp_global_table varchar(255) = '##global_tmp_' + CONVERT(varchar(36), NEWID())
SET @sql = @sql + 'select * into [' + @tmp_global_table + '] from YOURTABLE'
EXEC(@sql)

EXEC('SELECT * FROM [' + @tmp_global_table + ']')
9
pierre 2009-08-12 02:46.

もう1つの方法は、型を作成し、PIPELINEDを使用してオブジェクトを返すことです。ただし、これは列を知ることに限定されます。ただし、次のことができるという利点があります。

SELECT * 
FROM TABLE(CAST(f$my_functions('8028767') AS my_tab_type))
8
S Krishna 2019-04-28 00:48.

これは単純な2ステップのプロセスです。-一時テーブルを作成します-一時テーブルに挿入します。

同じことを実行するコード:

CREATE TABLE #tempTable (Column1 int, Column2 varchar(max));
INSERT INTO #tempTable 
EXEC [app].[Sproc_name]
@param1 = 1,
@param2 =2;
6
vendettamit 2019-06-14 08:26.

周りを検索した後、特にデータベース管理者でない場合に、ストアドプロシージャの結果定義の汎用スキーマを使用OPENROWSETまたはOPENQUERY使用せずに、ストアドプロシージャの一時テーブルを動的に作成する方法を見つけました。

SQL Serverには、sp_describe_first_result_set任意のプロシージャ結果セットのスキーマを提供できる組み込みプロシージャがあります。この手順の結果からスキーマテーブルを作成し、すべてのフィールドを手動でNULLABLEに設定しました。

declare @procname varchar(100) = 'PROCEDURENAME' -- your procedure name
declare @param varchar(max) = '''2019-06-06''' -- your parameters 
declare @execstr nvarchar(max) = N'exec ' + @procname
declare @qry nvarchar(max)

-- Schema table to store the result from sp_describe_first_result_set.
create table #d
(is_hidden  bit  NULL, column_ordinal   int  NULL, name sysname NULL, is_nullable   bit  NULL, system_type_id   int  NULL, system_type_name nvarchar(256) NULL,
max_length  smallint  NULL, precision   tinyint  NULL,  scale   tinyint  NULL,  collation_name  sysname NULL, user_type_id  int NULL, user_type_database    sysname NULL,
user_type_schema    sysname NULL,user_type_name sysname NULL,assembly_qualified_type_name   nvarchar(4000),xml_collection_id    int NULL,xml_collection_database    sysname NULL,
xml_collection_schema   sysname NULL,xml_collection_name    sysname NULL,is_xml_document    bit  NULL,is_case_sensitive bit  NULL,is_fixed_length_clr_type  bit  NULL,
source_server   sysname NULL,source_database    sysname NULL,source_schema  sysname NULL,source_table   sysname NULL,source_column  sysname NULL,is_identity_column bit NULL,
is_part_of_unique_key   bit NULL,is_updateable  bit NULL,is_computed_column bit NULL,is_sparse_column_set   bit NULL,ordinal_in_order_by_list   smallint NULL,
order_by_list_length    smallint NULL,order_by_is_descending    smallint NULL,tds_type_id   int  NULL,tds_length    int  NULL,tds_collation_id  int NULL,
tds_collation_sort_id   tinyint NULL)


-- Get result set definition of your procedure
insert into #d
EXEC sp_describe_first_result_set @exestr, NULL, 0

-- Create a query to generate and populate a global temp table from above results
select 
@qry = 'Create table ##t(' +
stuff(  
    (select ',' + name + ' '+ system_type_name + ' NULL'
    from #d d For XML Path, TYPE)
    .value(N'.[1]', N'nvarchar(max)')
, 1,1,'')
+ ')

insert into ##t 
Exec '[email protected]+' ' + @param

Exec sp_executesql @qry

-- Use below global temp table to query the data as you may
select * from ##t

-- **WARNING** Don't forget to drop the global temp table ##t.
--drop table ##t
drop table #d 

SqlServerバージョンで開発およびテスト済み-MicrosoftSQL Server 2016(RTM)-13.0.1601.5(ビルド17134 :)

使用しているSQLサーバーのバージョンのスキーマを微調整できます(必要な場合)。

5
Matthew Baker 2017-01-28 01:52.

これは、ストアドプロシージャが1つのテーブルのみを返す場合、SQL Server2014以降で実行できます。誰かが複数のテーブルに対してこれを行う方法を見つけたら、私はそれについて知りたいです。

DECLARE @storedProcname NVARCHAR(MAX) = ''
SET @storedProcname = 'myStoredProc'

DECLARE @strSQL AS VARCHAR(MAX) = 'CREATE TABLE myTableName '

SELECT @strSQL = @strSQL+STUFF((
SELECT ',' +name+' ' + system_type_name 
FROM sys.dm_exec_describe_first_result_set_for_object (OBJECT_ID(@storedProcname),0)
FOR XML PATH('')
),1,1,'(') + ')'

EXEC (@strSQL)

INSERT INTO myTableName

EXEC ('myStoredProc @param1=1, @param2=2')

SELECT * FROM myTableName

DROP TABLE myTableName

これにより、返されたテーブルの定義がシステムテーブルから取得され、それを使用して一時テーブルが作成されます。次に、前述のように、ストアドプロシージャからデータを入力できます。

動的SQLでも機能するこのバリアントもあります。

4
lakshmivisalij 2015-03-24 23:01.

渡されるパラメータがわかっていて、sp_configureを作成するためのアクセス権がない場合は、これらのパラメータを使用してストアドプロシージャを編集すると、同じものを##グローバルテーブルに格納できます。

2
Charles Byrne 2019-09-21 11:16.

質問に数年遅れましたが、迅速で汚いコード生成のためにこのようなものが必要でした。他の人が述べているように、一時テーブルを前もって定義する方が簡単だと思いますが、このメソッドは単純なストアドプロシージャクエリまたはSQLステートメントで機能するはずです。

これは少し複雑になりますが、ここの寄稿者とDBA Stack ExchangeGetストアドプロシージャの結果の列タイプからのPaulWhiteのソリューションを借りています。繰り返しになりますが、このアプローチと例は、マルチユーザー環境のプロセス向けには設計されていません。この場合、テーブル定義は、コード生成テンプレートプロセスで参照できるように、グローバル一時テーブルに短時間設定されます。

私はこれを完全にテストしていないので、警告があるかもしれないので、PaulWhiteの回答のMSDNリンクにアクセスすることをお勧めします。これはSQL2012以降に適用されます。

まず、Oracleのdescribeに似たストアドプロシージャsp_describe_first_result_setを使用します。

これにより、最初の結果セットの最初の行が評価されるため、ストアドプロシージャまたはステートメントが複数のクエリを返す場合は、最初の結果のみが記述されます。

一時テーブル定義を作成するために選択する単一のフィールドを返すタスクを分解するために、ストアドプロシージャを作成しました。

CREATE OR ALTER PROCEDURE [dbo].[sp_GetTableDefinitionFromSqlBatch_DescribeFirstResultSet]
(
     @sql NVARCHAR(4000)
    ,@table_name VARCHAR(100)
    ,@TableDefinition NVARCHAR(MAX) OUTPUT
)
AS
BEGIN
    SET NOCOUNT ON
    DECLARE @TempTableDefinition NVARCHAR(MAX)
    DECLARE @NewLine NVARCHAR(4) = CHAR(13)+CHAR(10)

    DECLARE @ResultDefinition TABLE (  --The View Definition per MSDN
      is_hidden         bit NOT NULL
    , column_ordinal    int NOT NULL
    , [name]            sysname NULL
    , is_nullable       bit NOT NULL
    , system_type_id    int NOT NULL
    , system_type_name  nvarchar(256) NULL
    , max_length        smallint NOT NULL
    , [precision]       tinyint NOT NULL
    , scale             tinyint NOT NULL
    , collation_name    sysname NULL    
    , user_type_id      int NULL
    , user_type_database    sysname NULL    
    , user_type_schema  sysname NULL
    , user_type_name    sysname NULL    
    , assembly_qualified_type_name      nvarchar(4000)  
    , xml_collection_id         int NULL
    , xml_collection_database   sysname NULL    
    , xml_collection_schema     sysname NULL    
    , xml_collection_name       sysname NULL
    , is_xml_document           bit NOT NULL            
    , is_case_sensitive         bit NOT NULL            
    , is_fixed_length_clr_type  bit NOT NULL    
    , source_server             sysname NULL            
    , source_database           sysname NULL
    , source_schema             sysname NULL
    , source_table              sysname NULL
    , source_column             sysname NULL
    , is_identity_column        bit NULL
    , is_part_of_unique_key     bit NULL
    , is_updateable             bit NULL
    , is_computed_column        bit NULL
    , is_sparse_column_set      bit NULL
    , ordinal_in_order_by_list  smallint NULL   
    , order_by_is_descending    smallint NULL   
    , order_by_list_length      smallint NULL
    , tds_type_id               int NOT NULL
    , tds_length                int NOT NULL
    , tds_collation_id          int NULL
    , tds_collation_sort_id     tinyint NULL
    )

    --Insert the description into table variable    
    INSERT @ResultDefinition
    EXEC sp_describe_first_result_set @sql

    --Now Build the string to create the table via union select statement
    ;WITH STMT AS (
        SELECT N'CREATE TABLE ' + @table_name + N' (' AS TextVal
        UNION ALL

        SELECT 
         CONCAT(
                CASE column_ordinal
                    WHEN 1 THEN '     ' ELSE '   , ' END  --Determines if comma should precede
                , QUOTENAME([name]) , '   ', system_type_name  -- Column Name and SQL TYPE
                ,CASE is_nullable 
                    WHEN 0 THEN '   NOT NULL' ELSE '   NULL' END --NULLABLE CONSTRAINT          
               ) AS TextVal
        FROM @ResultDefinition WHERE is_hidden = 0  -- May not be needed
        UNION ALL

        SELECT N');' + @NewLine
    ) 

    --Now Combine the rows to a single String
    SELECT @TempTableDefinition = COALESCE (@TempTableDefinition + @NewLine + TextVal, TextVal) FROM STMT

    SELECT @TableDefinition = @TempTableDefinition
END

難問は、グローバルテーブルを使用する必要があることですが、衝突を心配せずに頻繁にドロップして作成できるように、グローバルテーブルを十分に一意にする必要があります。
この例では、グローバル変数にGUID(FE264BF5_9C32_438F_8462_8A5DC8DEE49E)を使用して、ハイフンをアンダースコアに置き換えました。

DECLARE @sql NVARCHAR(4000) = N'SELECT @@SERVERNAME as ServerName, GETDATE() AS Today;'
DECLARE @GlobalTempTable VARCHAR(100) = N'##FE264BF5_9C32_438F_8462_8A5DC8DEE49E_MyTempTable'

[email protected] can be a stored procedure name like dbo.foo without parameters

DECLARE @TableDef NVARCHAR(MAX)

DROP TABLE IF EXISTS #MyTempTable
DROP TABLE IF EXISTS ##FE264BF5_9C32_438F_8462_8A5DC8DEE49E_MyTempTable

EXEC [dbo].[sp_GetTableDefinitionFromSqlBatch_DescribeFirstResultSet] 
    @sql, @GlobalTempTable, @TableDef OUTPUT

--Creates the global table ##FE264BF5_9C32_438F_8462_8A5DC8DEE49E_MyTempTable
EXEC sp_executesql @TableDef 

--Now Call the stored procedure, SQL Statement with Params etc.
INSERT ##FE264BF5_9C32_438F_8462_8A5DC8DEE49E_MyTempTable
    EXEC sp_executesql @sql 

--Select the results into your undefined Temp Table from the Global Table
SELECT * 
INTO #MyTempTable
FROM ##FE264BF5_9C32_438F_8462_8A5DC8DEE49E_MyTempTable

SELECT * FROM #MyTempTable

DROP TABLE IF EXISTS #MyTempTable
DROP TABLE IF EXISTS ##FE264BF5_9C32_438F_8462_8A5DC8DEE49E_MyTempTable

繰り返しになりますが、私は単純なストアドプロシージャクエリと単純なクエリでのみテストしたので、マイレージは異なる場合があります。これが誰かを助けることを願っています。

2
Valentin Petkov 2020-06-16 01:49.

これが私のT-SQLとパラメータです

sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO

sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO

DECLARE @param1 int = 1, @param2 int = 2
DECLARE @SQLStr varchar(max) = 'SELECT * INTO #MyTempTable
                                FROM OPENROWSET(''SQLNCLI'',  
''Server=ServerName;Database=DbName;Trusted_Connection=yes'',
''exec StoredProcedureName '+ CAST(@param1 AS varchar(15)) +','+ CAST(@param2 AS varchar(15)) +''') AS a ;
 select * from #MyTempTable;
 drop table #MyTempTable        
';
EXECUTE(@SQLStr);
1
jmoreno 2018-07-11 04:58.

さて、あなたは一時テーブルを作成する必要がありますが、それは正しいスキーマを持っている必要はありません....私は既存の一時テーブルを変更して適切なデータを持つ必要な列を持つようにするストアドプロシージャを作成しましたタイプと順序(既存のすべての列を削除し、新しい列を追加します):

GO
create procedure #TempTableForSP(@tableId int, @procedureId int)  
as   
begin  
    declare @tableName varchar(max) =  (select name  
                                        from tempdb.sys.tables 
                                        where object_id = @tableId
                                        );    
    declare @tsql nvarchar(max);    
    declare @tempId nvarchar(max) = newid();      
    set @tsql = '    
    declare @drop nvarchar(max) = (select  ''alter table tempdb.dbo.' + @tableName 
            +  ' drop column ''  + quotename(c.name) + '';''+ char(10)  
                                   from tempdb.sys.columns c   
                                   where c.object_id =  ' + 
                                         cast(@tableId as varchar(max)) + '  
                                   for xml path('''')  
                                  )    
    alter table tempdb.dbo.' + @tableName + ' add ' + QUOTENAME(@tempId) + ' int;
    exec sp_executeSQL @drop;    
    declare @add nvarchar(max) = (    
                                select ''alter table ' + @tableName 
                                      + ' add '' + name 
                                      + '' '' + system_type_name 
                           + case when d.is_nullable=1 then '' null '' else '''' end 
                                      + char(10)   
                              from sys.dm_exec_describe_first_result_set_for_object(' 
                               + cast(@procedureId as varchar(max)) + ', 0) d  
                                order by column_ordinal  
                                for xml path(''''))    

    execute sp_executeSQL  @add;    
    alter table '  + @tableName + ' drop column ' + quotename(@tempId) + '  ';      
    execute sp_executeSQL @tsql;  
end         
GO

create table #exampleTable (pk int);

declare @tableId int = object_Id('tempdb..#exampleTable')
declare @procedureId int = object_id('examplestoredProcedure')

exec #TempTableForSP @tableId, @procedureId;

insert into #exampleTable
exec examplestoredProcedure

sys.dm_exec_describe_first_result_set_for_objectがストアドプロシージャの結果を判別できない場合(たとえば、一時テーブルを使用する場合)、これは機能しないことに注意してください

0
Ludovic Aubert 2019-11-30 06:09.

動的SQLに一時表を作成させる場合、この表は、ストアード・プロシージャーが呼び出される接続ではなく、動的SQL接続によって所有されます。

DECLARE @COMMA_SEPARATED_KEYS varchar(MAX);
DROP TABLE IF EXISTS KV;
CREATE TABLE KV (id_person int, mykey varchar(30), myvalue int);
INSERT INTO KV VALUES
(1, 'age', 16),
(1, 'weight', 63),
(1, 'height', 175),
(2, 'age', 26),
(2, 'weight', 83),
(2, 'height', 185);
WITH cte(mykey) AS (
    SELECT DISTINCT mykey FROM KV
) 
SELECT @COMMA_SEPARATED_KEYS=STRING_AGG(mykey,',') FROM cte;
SELECT @COMMA_SEPARATED_KEYS AS keys;

DECLARE @ExecuteExpression varchar(MAX);

DROP TABLE IF EXISTS #Pivoted;

SET @ExecuteExpression = N'
SELECT * 
INTO #Pivoted
FROM
(
    SELECT
        mykey,
        myvalue,
        id_person
    FROM KV
) AS t
PIVOT(
    MAX(t.myvalue) 
    FOR mykey IN (COMMA_SEPARATED_KEYS)
) AS pivot_table;
';

SET @ExecuteExpression = REPLACE(@ExecuteExpression, 'COMMA_SEPARATED_KEYS', @COMMA_SEPARATED_KEYS);

EXEC(@ExecuteExpression);

SELECT * FROM #Pivoted;

メッセージ208、レベル16、状態0無効なオブジェクト名 '#Pivoted'。これは、#Pivotedが動的SQL接続によって所有されているためです。だから最後の指示

SELECT * FROM #Pivoted

失敗します。

この問題に直面しない1つの方法は、#Pivotedへのすべての参照が動的クエリ自体の内部から行われるようにすることです。

DECLARE @COMMA_SEPARATED_KEYS varchar(MAX);
DROP TABLE IF EXISTS KV;
CREATE TABLE KV (id_person int, mykey varchar(30), myvalue int);
INSERT INTO KV VALUES
(1, 'age', 16),
(1, 'weight', 63),
(1, 'height', 175),
(2, 'age', 26),
(2, 'weight', 83),
(2, 'height', 185);
WITH cte(mykey) AS (
    SELECT DISTINCT mykey FROM KV
) 
SELECT @COMMA_SEPARATED_KEYS=STRING_AGG(mykey,',') FROM cte;
SELECT @COMMA_SEPARATED_KEYS AS keys;


DECLARE @ExecuteExpression varchar(MAX);

DROP TABLE IF EXISTS #Pivoted;

SET @ExecuteExpression = N'
SELECT * 
INTO #Pivoted
FROM
(
    SELECT
        mykey,
        myvalue,
        id_person
    FROM KV
) AS t
PIVOT(
    MAX(t.myvalue) 
    FOR mykey IN (COMMA_SEPARATED_KEYS)
) AS pivot_table;
SELECT * FROM #Pivoted;
';

SET @ExecuteExpression = REPLACE(@ExecuteExpression, 'COMMA_SEPARATED_KEYS', @COMMA_SEPARATED_KEYS);

EXEC(@ExecuteExpression);

Related questions

MORE COOL STUFF

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは、夫に会ったとき、典型的な交際のアドバイスに逆らいました。

マイケルシーンが非営利の俳優である理由

マイケルシーンが非営利の俳優である理由

マイケルシーンは非営利の俳優ですが、それは正確にはどういう意味ですか?

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

特徴的なスターのコリン・エッグレスフィールドは、RomaDrama Liveでのスリル満点のファンとの出会いについて料理しました!加えて、大会での彼のINSPIREプログラム。

「たどりつけば」をオンラインでストリーミングできない理由

「たどりつけば」をオンラインでストリーミングできない理由

ノーザンエクスポージャーが90年代の最も人気のある番組の1つになった理由を確認するには、Blu-rayまたはDVDプレーヤーをほこりで払う必要があります。

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖は、世界で2番目に大きいボイリング湖です。そこにたどり着くまでのトレッキングは大変で長いですが、努力する価値は十分にあります。

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

サロンからのヘアトリミングや個人的な寄付は、油流出を吸収して環境を保護するのに役立つマットとして再利用できます。

ホワイトハウスの最も記憶に残る結婚式を見てください

ホワイトハウスの最も記憶に残る結婚式を見てください

過去200年以上の間にホワイトハウスで結婚したのはほんの数人です。彼らは誰でしたか、そしてそこで結婚式を獲得するために何が必要ですか?

あなたが危険なほど過熱しているかどうかを知る方法

あなたが危険なほど過熱しているかどうかを知る方法

カリフォルニア州カレキシコでは、6月上旬に気温が約115度に達すると、人々はダウンタウンを歩きます。私たちは夏にたった2週間で、熱波はすでに米国を灼熱しています。

庵野秀明がシン・ウルトラマンのモーションキャプチャ俳優として最高の人生を送るのを見る

庵野秀明がシン・ウルトラマンのモーションキャプチャ俳優として最高の人生を送るのを見る

庵野秀明は、ついに新世紀エヴァンゲリオンを締めくくった後、自分のやりたいことを何でもしているようだ(少なくとも今のところ)。彼はウルトラマン映画を作るようになり、現在は仮面ライダー1号を監督しており、生涯にわたる2つのスーパーヒーローの執着のために新しい章を作成することを彼に任せています。

今週のおもちゃのニュースは間違いなくあなたのウーキーを曲げました

今週のおもちゃのニュースは間違いなくあなたのウーキーを曲げました

io9の最新かつ最高のオタク玩具ニュースの定期的なまとめであるToyAisleへようこそ。今週は、オビ=ワンの水曜日をさらに2つのハズブロフィギュアで締めくくります。Super7はスプリングフィールドに戻り、さらに多くのシンプソンズアルティメットを目指します。ダースベイダーをバップする勇気はありますか?見てみな!プレイメイトは、初期の頃からのシンプソンズのフィギュアの信じられないほど豊富なラインで素晴らしい仕事をしましたが、Super7のシンプソンズアルティメットほど詳細でアクセサリー化されていませんでした!数字—彼らがもっと早く彼らを追い出し始めてくれることを願っています。

ディズニーの不条理な$5,000スターウォーズカクテルの実際の内容は次のとおりです

ディズニーの不条理な$5,000スターウォーズカクテルの実際の内容は次のとおりです

その悪名高い5,000ドルのスターウォーズをテーマにした飲み物に何が入っているのか知りたいと思っているなら、それはもはや完全な謎ではありません。ハイパースペースラウンジのディズニーウィッシュクルーズ船で独占的に入手できるカイバークリスタルは、豪華に提示されたテーマカクテルで、提供されるカムトノに付属しているはずですが、残念ながらそうではありません。銀河系で最も高価なトップシェルフセレクション。

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya shared a sweet photo in honor of boyfriend Tom Holland's 26th birthday Wednesday

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

シーレン「Ms.JuicyBaby」ピアソンは、先月脳卒中で入院した後、「もう一度たくさんのことをする方法を学ばなければならない」ため、言語療法を受けていることを明らかにしました。

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

オスカー受賞者の世紀半ばの家には、3つのベッドルーム、2つのバス、オーシャンフロントの景色があります。

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、生後4か月の娘、モナコに母乳育児をしていると語った。

Seguindo Todos os Protocolos (2022), de Fábio Leal

Seguindo Todos os Protocolos (2022), de Fábio Leal

Chico quer transar. Até aí, tudo bem.

多元宇宙—Junø

多元宇宙—Junø

チェーン間アカウントがJunoに登場します。異なるブロックチェーン間でスマートコントラクトの構成可能性と真の相互運用性を提供します。

#brand【ベター・コール・ソール!アメリカのテレビシリーズ「ブレイキング・バッド」に最高のビジネス例が隠されている】・・・ルールクリエイティブ

#brand【ベター・コール・ソール!アメリカのテレビシリーズ「ブレイキング・バッド」に最高のビジネス例が隠されている】・・・ルールクリエイティブ

1.ドラマを見た後、起業する考えはありますか?あなたのビジネスはボトルネックに遭遇しましたか?方向性がなくてわからない場合は、ドラマを追いかけて行くことを心からお勧めします。(?)ブラフではなく、最も完璧なビジネス例を隠すドラマがあります。2.ブレイキング・バッドとその弁護士ドラマ「ブレイキング・バッド」を見た友人たちは、演劇の中で、穏やかな表情で、弁護士のソウル・グッドマンに深く感銘を受けなければなりません。口を開けて、感覚の弱い傭兵の性格を持っています。道徳の面で、サル・グッドマンは無意識のうちに劇に欠かせない役割を果たし、彼自身のシリーズ「絶望的な弁護士」(ベター・コール・ソール)を生み出しました。ウェントウのテキストとビデオは、劇中のソウル・グッドマンのテレビコマーシャルです。製品(サービス)、競争戦略、市場ポジショニング、ブランド名、ターゲット顧客グループ、コミュニケーション軸から広告まで、サル・グッドマンの役割のビジネス設定は、「最低」と見なすことができる超超超超超超完全です。ブランドコミュニケーションのコスト」「変化」のモデル。なぜ?私の分析をご覧ください。3.ソウル・グッドマンの「事業戦略」1.基本情報ブランド名:Saul Goodman製品:法律相談サービス対象顧客:麻薬中毒、飲酒運転、事故など。法律知識の欠如は、一般的に公立弁護士にしか余裕がなく、真面目な弁護士も「特別な法律を持つ消費者」を避けます。恐れてはいけない「​​ニーズ」。コミュニケーションの主軸:この国のすべての男性、女性、子供は有罪判決を受けるまで無実だと思います。地域:アルバカーキ市スローガン:Thrallに電話したほうがいいです!(ベター・コール・ソール)広告:2つの可能性のある犯罪状況をシミュレートします+サウルの主張+サウルのスローガン2をより適切に呼び出します。

メインネットガイド— Arbitrum Odyssey Week 2

メインネットガイド— Arbitrum Odyssey Week 2

最新のアップデートを受け取るために私たちに従ってください。ニュースレター:https://www。

Language