0

特定のデータベースで実行するかなり大きなクエリがあります。このクエリが行うことは、特定のテーブルから特定の列を選択し、それらを新しいテーブルにダンプすることです。新しいテーブルは、後でクエリで使用および変更されます。

私が直面している問題は、データベースはおそらく同じプログラムからのものであるにもかかわらず、あるデータベースには列 email1、email2、および email3 が含まれている可能性がありますが、次のデータベースには email1 しか含まれていない可能性があります。email1-3 は select ステートメントの一部として使用されるため、これらの列のいずれかが欠落している場合、その部分が失敗し、テーブルが作成されません。

私はまだこれに非常に慣れていないので、私の質問は単純またはばかげているかもしれませんが、このように列が欠落しているときに結果を保存する方法はありますか? クエリから欠落している列を簡単に削除して再度実行することもできますが、これを行うためのより正しい方法があるかどうか疑問に思っていますか?

例:

SELECT  Customer.[Name], 
    Customer.AcctKey, 
    SUBSTRING(Customer.LastName,1,25) AS [Last Name], 
    SUBSTRING(Customer.FirstName,1,25) AS [First Name], 
    Customer.Add1 AS Address, 
    Customer.Add2 AS Address2, 
    Customer.City, 
    Customer.State,                 
    Customer.Zip, 
    Location.Add1 AS [Ship Address], 
    Location.Add2 AS [Ship Address2], 
    Location.City AS [Ship City], 
    Location.State AS [Ship State], 
    Location.Zip AS [Ship Zip], 
    Customer.Phone1 AS Phone, 
    Customer.Phone2 AS [Alt Phone],
    Customer.Phone3 AS [Cell Phone],
    Customer.Phone4 AS Fax, 
    Customer.lblPhone1, 
    Customer.lblPhone2, 
    Customer.lblPhone3, 
    Customer.lblPhone4, 
    Customer.Terms, 
    Customer.[Key] AS [Account Number], 
    Location.Notes, 
    Location.TaxCode AS [Tax Item], 
    Location.Zone AS [Map Code], 
    Location.Contact, 
    Location.Email, 
    Location.Email6, --Fails because column(s) Email2-6
    Location.Email5, --don't exist in this database
    Location.Email4, --but they might in another
    Location.Email3, --and I'd like to get the data
    Location.Email2, --if they do
    Location.Phone6, 
    Location.Phone5

INTO [01Parents]
FROM Customer 
INNER JOIN Location ON Customer.[Key] = Location.[Key]
4

1 に答える 1

0

以下を試すことができます。

DECLARE @SQL AS NVARCHAR(MAX)

SELECT
    @SQL = COALESCE(@SQL, N'') + CASE WHEN @SQL IS NULL THEN c.name ELSE N', ' + c.name END
FROM
    sys.columns AS c INNER JOIN sys.objects AS o
        ON
            c.object_id = o.object_id
WHERE
    o.name = @table
ORDER BY
    c.column_id

SET @SQL = N'SELECT ' + @SQL +  N' INTO 01Parents FROM Customer INNER JOIN ON Customer.[Key] = Location.[Key]'

EXEC sp_executesql @sql
于 2013-01-18T19:58:47.693 に答える