2016-12-12 9 views
0

私はこのストアドプロシージャを持っています。後に挿入して更新する方法

DECLARE @itWorks nvarchar (39) 
SET @itWorks = @dbName + '.' [email protected] 

INSERT INTO sampleDatabase.dbo.WorkFlowCopy 
     ([ID] 
     ,[ActivityDefinitionID] 
     ,[ParentID] 
     ,[Caption] 
     ,[Description] 
     ,[ShortDescription] 
     ,[Name] 
     ,[Order] 
     ,[ReferenceNumber] 
     ,[ShowOnNavigation] 
     ,[Status] 

EXEC('SELECT * FROM OPENDATASOURCE(''SQLOLEDB'',''Data Source=' + @serverName+ ';User ID='[email protected]+';Password=' [email protected]+''').'[email protected]+' sdb1') 

UPDATE sampleDatabase.dbo.WorkFlowCopy 
SET ServerName = @serverName, 
    DBName = @dbName 
WHERE ServerName = NULL AND DBName = NULL 

このクエリの機能は、別のサーバーの値を特定のデータベースに挿入することです。だから私は動的なクエリを使用しています。その挿入ステートメントの後、私のデータベーステーブル内の私のカラム(ServerName、DBName)は、値を挿入していないのでNULLになります。

私はUPDATEのクエリを使用しましたが、それは機能しませんでした。 "(0行が影響を受ける)"可能な方法はありますか?

答えて

3

WHEREの条件が正しくありません。 NULLは値ではありませんので、NULLと比較ではなく、それは前のSELECT文でこれらの値を設定することがはるかに効率的である、と述べたIS NULL

/*Change*/ 
WHERE ServerName = NULL AND DBName = NULL 
/*To*/ 
WHERE ServerName IS NULL AND DBName IS NULL 

を使用しないでください。いずれにせよ、カラム値を明示的に指定するには、SELECT *を変更する必要があります。スキーマの変更により、現在のコードが破損する危険性があります。だからあなたのINSERTにサーバー名およびDBNAMEを追加し、次のようにダイナミックSELECTを変更:

EXEC('SELECT ID, 
     ActivityDefinitionID, 
     ParentID, 
     ..., 
     Status, 
     '[email protected]+', 
     '[email protected]' 
FROM ...') 
+0

それは働きました! :)ありがとうたくさんの男。あなたは私の日を救った。 – Jhe

関連する問題