私はある数の列を持つテーブルを持っています。どのように動的に列を生成するのですか?
私はtable2の動的の列として表1の特定の列のデータを他のテーブルを移入します。私は動的に言うとき
私が今までにどのようなデータが表1の列に追加されたときにtable2のは列のように多くの数が移入されたと言うことを意味します。その場でスキーマを変更する
私はある数の列を持つテーブルを持っています。どのように動的に列を生成するのですか?
私はtable2の動的の列として表1の特定の列のデータを他のテーブルを移入します。私は動的に言うとき
私が今までにどのようなデータが表1の列に追加されたときにtable2のは列のように多くの数が移入されたと言うことを意味します。その場でスキーマを変更する
は本当にいくつかの理由のために、良いアイデアではありません。あなたが説明したことから、私はあなたがこれについてのビューを使う方が良いと思う。ビューは、より少ない副作用で、探している動的な機能を提供します。
この記事を参照してください。 How to create a view in SQL Server
何でも根本的な問題へのよりよい解決策は、あなたがそこにいる私は、再び多くの物事がうまくいかないことができ、これは悪い考えです免責条項を繰り返すことになります、と私は確信しています」解決しようとしている。つまり、明示的な質問に答えるために、これを行う方法の例を次に示します:
USE tempdb;
GO
CREATE TABLE dbo.Table1(Description VARCHAR(32));
CREATE TABLE dbo.Table2(ID INT);
GO
CREATE TRIGGER dbo.CatchNewTable1Data
ON dbo.Table1
FOR INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += CHAR(13) + CHAR(10) +
'ALTER TABLE dbo.Table2 ADD '
+ QUOTENAME(d) + ' VARCHAR(255);' -- guessing on destination data type
FROM
(
SELECT DISTINCT d = LEFT([Description], 128) -- identifier <= 128
FROM inserted AS i
WHERE NOT EXISTS
(
SELECT 1 FROM sys.columns
WHERE name = LEFT(i.[Description], 128)
AND [object_id] = OBJECT_ID('dbo.Table2')
)
) AS x;
EXEC sp_executesql @sql;
END
GO
今すぐ試してみましょう!すでに存在する列、列の1つがすでに存在する複数行の挿入、複数行の挿入(dupes)などを試してください。値が255を超えていないことを確認してください。また、問題。どうして?最終的に私はあなたにこのソリューションを使用させたくないので、私は本当の問題を解決したいと思います。しかし、Google社員には、問題の解決策があることを示したいと思います。
-- does nothing:
INSERT dbo.Table1 SELECT 'ID';
-- only adds column 'foo':
INSERT dbo.Table1 SELECT 'ID'
UNION ALL SELECT 'foo';
-- adds both of these columns:
INSERT dbo.Table1 SELECT 'bar'
UNION ALL SELECT 'splan foob';
-- only adds one of these:
INSERT dbo.Table1 SELECT 'blat'
UNION ALL SELECT 'blat';
SELECT * FROM dbo.Table2;
結果:
ID foo bar splan foob blat
----------- ------------ ------------ ------------ ------------
は、クリーンアップすることを忘れないでください:
DROP TABLE dbo.Table1, dbo.Table2;
あなたが実際に何をしようとして明確ではありませんので、ご質問を手直ししてください。どのようにASP.NETに関連していますか? –
Table1に追加された新しいデータをTable2に追加するか、Table1に新しい列を追加すると自動的に同じ列がTable2に追加されるはずですか? (列はメタデータであり、データではなく、明らかにするのに役立ちます)。 –
私にはっきりさせてください。表1と表2の2つの表があります。 Table1に 'Description'という列があります。ユーザーは3行を追加してA、B、Cと答えます。これらの3つの値をTable2に列として追加するストアドプロシージャを作成して、Table2に列としてA、B、Cがあるようにします。これは、ユーザーがTable1の説明列に任意のデータを追加するときに、そのデータがtable2の列として表されるように、動的に実行する必要があります。 – user1226569