一時テーブルを作成したいと思います。このテーブルの列は、パラメーターとして指定したもので、区切り文字で区切られています。
たとえば、列名がid、name、addressの場合、それぞれのテーブルには、列と同じ量のヘッダー名が含まれている必要があります。同様に、次回は列番号と名前が変わる可能性があります。
この点で何か助けはありますか?
一時テーブルを作成したいと思います。このテーブルの列は、パラメーターとして指定したもので、区切り文字で区切られています。
たとえば、列名がid、name、addressの場合、それぞれのテーブルには、列と同じ量のヘッダー名が含まれている必要があります。同様に、次回は列番号と名前が変わる可能性があります。
この点で何か助けはありますか?
これを試して :-
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つのデフォルトパラメータを作成できます。詳細については、このリンクを確認してください。
これらの「動的フィールド名」が存在する場所から個別のリストからテーブルを作成できませんでした...次に、それを文字列リストとしてプッシュします...のように...色付きのテーブルを作成してから名前のフィールドを取得しましたそして今、それをテーブルヘッダーを構築するために使用できる文字列にプッシュします...数量に制限はありません...
SELECT @Fields = coalesce(@Fields + ',', '') + convert(varchar(50),[name])
FROM #TempCols
WHERE column_id > 1
ORDER BY column_id
ここで、Column_IDはウィンドウ化されたROW_Numberです。
私はそれが不可能であるという考えに同意しません。常に方法があり、今は見えないかもしれませんが、ネストしたり悪用したりして、ルールを必要なものに曲げることができる方法が常にあります。