1

一時テーブルを作成したいと思います。このテーブルの列は、パラメーターとして指定したもので、区切り文字で区切られています。

たとえば、列名がid、name、addressの場合、それぞれのテーブルには、列と同じ量のヘッダー名が含まれている必要があります。同様に、次回は列番号と名前が変わる可能性があります。

この点で何か助けはありますか?

4

2 に答える 2

3

これを試して :-

CREATE PROCEDURE GenerateTempTable 
@tableName as nvarchar(max),
@Col1 as nvarchar(255),
@Col2 as nvarchar(255)
AS
BEGIN
Declare @sql nvarchar(max)

set @sql='CREATE TABLE #'+ @tableName  + '
         ('+ @col1+ ' nvarchar(255),'+
          @col2 + ' nvarchar(255)
         )'

-- Select @sql   Check the DDL 

EXECUTE sp_executesql @sql,
N'@tableName nvarchar(max),@Col1 nvarchar(255),@Col2 nvarchar(255)',
@tableName = @tableName,@Col1=@Col1,@Col2=@Col2 


END

上記のクエリの問題は、一時テーブルが動的ブロッククエリで作成されるため、ブロックの後でアクセスできないことです。スコープ外のテーブルにアクセスするには、作成する必要がありますglobal temp table ##

編集:-グローバル一時テーブルと静的テーブル名の例

ALTER PROCEDURE GenerateTable 
@Col1 as nvarchar(255),
@Col2 as nvarchar(255)
AS
BEGIN
Declare @sql nvarchar(max)

If object_id('tempdb..##TempTable') is not null 
Drop table ##TempTable

set @sql='CREATE TABLE ##TempTable 
        ('+ @col1+ ' nvarchar(255),'+
        @col2 + ' nvarchar(255)
        )'

-- Select @sql   Check the DDL 

 EXECUTE sp_executesql @sql,
 N'@Col1 nvarchar(255),@Col2 nvarchar(255)',
 @Col1=@Col1,@Col2=@Col2 

 END

SPを実行するためのSQLは次のとおりです:-

 Declare @tableName varchar(max),
 @Col1 varchar(70),
 @Col2 varchar(70)

 Exec GenerateTable @col1='ColA',@Col2='ColB'

編集2:-

パラメータの数がx値を超えないことが確実な場合(5と言います)。次に、5つのデフォルトパラメータを作成できます。詳細については、このリンクを確認してください。

于 2012-10-31T08:17:39.840 に答える
0

これらの「動的フィールド名」が存在する場所から個別のリストからテーブルを作成できませんでした...次に、それを文字列リストとしてプッシュします...のように...色付きのテーブルを作成してから名前のフィールドを取得しましたそして今、それをテーブルヘッダーを構築するために使用できる文字列にプッシュします...数量に制限はありません...

SELECT @Fields = coalesce(@Fields + ',', '') +  convert(varchar(50),[name])
                FROM #TempCols
                WHERE column_id > 1
                ORDER BY column_id

ここで、Column_IDはウィンドウ化されたROW_Numberです。

私はそれが不可能であるという考えに同意しません。常に方法があり、今は見えないかもしれませんが、ネストしたり悪用したりして、ルールを必要なものに曲げることができる方法が常にあります。

于 2019-06-21T19:06:48.747 に答える