Author |
Topic |
LOOKUP_BI
Constraint Violating Yak Guru
295 Posts |
Posted - 2008-02-11 : 16:48:03
|
Hi,Maybe you can help me out.I have got this code from another ref site and have modified it for the following Problem :Compare any two identical tables, by passing table name, columns, and primary key as parameters.Perform Insert and Update and ensure both tables are in sync. Create PROCEDURE CompareTables(@table1 varchar(100), @table2 Varchar(100), @T1PK varchar(50),@T2PK varchar(50),@T1ColumnList varchar(1000), @T2ColumnList varchar(1000) = '')ASdeclare @SQL varchar(8000);declare @SQL1 varchar(8000);declare @SQL2 varchar(8000);IF @t2ColumnList = '' SET @T2ColumnList = @T1ColumnListIF @T2PK = '' SET @T2PK = @T1PKIF(@T2PK!=@T1PK)--INSERT NEW RECORDset @SQL = 'SELECT ''' + @table1 + ''' AS TableName, ' + @t1ColumnList + ' FROM ' + @Table1 + ' UNION ALL SELECT ''' + @table2 + ''' As TableName, ' + @t2ColumnList + ' FROM ' + @Table2set @SQL1='INSERT INTO'''+ @table2 +''set @SQL2='SELECT Max(TableName) as TableName, ' +@t1ColumnList + ' FROM (' + @SQL + ') A GROUP BY ' + @t1ColumnList + ' HAVING COUNT(*) = 1'IF(@T2PK=@T1PK)--UPDATE EXISTING RECORDSset @SQL=''set @SQL='UPDATE'''+ @table2 +'''SET'+ @t2ColumnList + '''='' '+ @t1ColumnList + 'FROM '+ @Table1 + ',''+ @Table2 + '--print @SQLexec ( @SQL)exec ( @SQL1)exec ( @SQL2)GoBUT UPON EXECUTING exec CompareTables '[Person].[Address]','[Person.Address.New]','[Person].[Address].[AddressID]','[Person.Address.New].[AddressID]','[AddressID],[AddressLine1],[AddressLine2],[City],[StateProvinceID],[PostalCode],[rowguid],[ModifiedDate]'I receive the following errorMsg 102, Level 15, State 1, Line 1Incorrect syntax near '[Person.Address.New]'.Msg 105, Level 15, State 1, Line 2Unclosed quotation mark after the character string '+ @Table2 + '.Msg 105, Level 15, State 1, Line 1Unclosed quotation mark after the character string '[Person.Address.New]'.Msg 102, Level 15, State 1, Line 1Incorrect syntax near '[Person.Address.New]'.I have used the person.address table in Adwentureworks and identical table named Person.Address.New .Im totally lost and have to get this done as soon as possible.Please guide. |
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2008-02-11 : 23:47:18
|
The dynamic sql strings where not correctly built at many places. I've fixed them as far as i can. Try running this & see if it works for you:-CREATE PROCEDURE CompareTables(@table1 varchar(100), @table2 Varchar(100), @T1PK varchar(50),@T2PK varchar(50),@T1ColumnList varchar(1000), @T2ColumnList varchar(1000) = '')ASdeclare @SQL varchar(8000);declare @SQL1 varchar(8000);declare @SQL2 varchar(8000);declare @Col1Count int,@Col2Count intIF @t2ColumnList = '' SET @T2ColumnList = @T1ColumnListIF @T2PK = '' SET @T2PK = @T1PKIF(@T2PK!=@T1PK)--INSERT NEW RECORDBEGINset @SQL = 'SELECT ''' + @table1 + ''' AS TableName, ' + @t1ColumnList + ' FROM ' + @table1 + ' UNION ALL SELECT ''' + @table2 + ''' As TableName, ' + @t2ColumnList + ' FROM ' + @Table2set @SQL1='INSERT INTO '+ @table2 +'SELECT Max(TableName) as TableName, ' +@t1ColumnList + ' FROM (' + @SQL + ') A GROUP BY ' + @t1ColumnList + ' HAVING COUNT(*) = 1'EXEC @SQL1ENDIF(@T2PK=@T1PK)--UPDATE EXISTING RECORDSBEGINset @SQL=''set @Col1Count=(LEN(@t1ColumnList)-LEN(REPLACE(@t1ColumnList,',',''))) + 1set @Col2Count=(LEN(@t2ColumnList)-LEN(REPLACE(@t2ColumnList,',',''))) + 1IF @Col1Count <> @Col2Count PRINT 'Column lists are not same'ELSEBEGINDECLARE @Col1 varchar(50),@Col2 varchar(50)WHILE @t1ColumnList IS NOT NULL AND @t2ColumnList IS NOT NULLBEGINSELECT @Col1=LEFT(@t1ColumnList,CASE WHEN CHARINDEX(',',@t1ColumnList)>0 THEN CHARINDEX(',',@t1ColumnList) ELSE LEN(@t1ColumnList)+1 END -1),@Col2=LEFT(@t2ColumnList,CASE WHEN CHARINDEX(',',@t2ColumnList)>0 THEN CHARINDEX(',',@t2ColumnList) ELSE LEN(@t1ColumnList)+1 END-1)set @SQL2=COALESCE(@SQL2,'')+ @table2+'.'+ @Col1 + '='+ @table1+'.'+@Col2 + ','SELECT @t1ColumnList=SUBSTRING(@t1ColumnList,CASE WHEN CHARINDEX(',',@t1ColumnList)>0 THEN CHARINDEX(',',@t1ColumnList) ELSE NULL END +1,LEN(@t1ColumnList)),@t2ColumnList=SUBSTRING(@t2ColumnList,CASE WHEN CHARINDEX(',',@t2ColumnList)>0 THEN CHARINDEX(',',@t2ColumnList) ELSE NULL END+1,LEN(@t2ColumnList))ENDset @SQL='UPDATE '+ @table2 + ' SET '+ LEFT(@SQL2,LEN(@SQL2)-1) + 'FROM '+ @Table1 --+ ','''+ @Table2 + ''ENDExec (@SQL)ENDGo |
 |
|
LOOKUP_BI
Constraint Violating Yak Guru
295 Posts |
Posted - 2008-02-12 : 08:35:42
|
Hi Visakh,Thanks a lot , I tried executing the code but It returned error as Msg 203, Level 16, State 2, Procedure CompareTables, Line 27The name 'INSERT INTO [Person.Address.New]SELECT Max(TableName) as TableName, [AddressID],[AddressLine1],[AddressLine2],[City],[StateProvinceID],[PostalCode],[rowguid],[ModifiedDate] FROM (SELECT '[Person].[Address]' AS TableName, [AddressID],[AddressLine1],[AddressLine2],[City],[StateProvinceID],[PostalCode],[rowguid],[ModifiedDate] FROM [Person].[Address] UNION ALL SELECT '[Person.Address.New]' As TableName, [AddressID],[AddressLine1],[AddressLine2],[City],[StateProvinceID],[PostalCode],[rowguid],[ModifiedDate] FROM [Person.Address.New]) A GROUP BY [AddressID],[AddressLine1],[AddressLine2],[City],[StateProvinceID],[PostalCode],[rowguid],[Modi' is not a valid identifier.Hope you can help me out on this one.Thank You! |
 |
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2008-02-12 : 09:05:53
|
Can you try printing out strings @SQL,@SQL1,@SQL2 & see if they are right?also check the lengths of themSELECT LEN(@SQL),LEN(@SQL1),LEN(@SQL2) |
 |
|
LOOKUP_BI
Constraint Violating Yak Guru
295 Posts |
Posted - 2008-02-12 : 09:25:41
|
Visakh,Can you tell me where to place this Print statment and how do I execute it.Im not very familiar with sp. |
 |
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2008-02-12 : 09:35:49
|
CREATE PROCEDURE CompareTables(@table1 varchar(100), @table2 Varchar(100), @T1PK varchar(50),@T2PK varchar(50),@T1ColumnList varchar(1000), @T2ColumnList varchar(1000) = '')ASdeclare @SQL varchar(8000);declare @SQL1 varchar(8000);declare @SQL2 varchar(8000);declare @Col1Count int,@Col2Count intIF @t2ColumnList = '' SET @T2ColumnList = @T1ColumnListIF @T2PK = '' SET @T2PK = @T1PKIF(@T2PK!=@T1PK)--INSERT NEW RECORDBEGINset @SQL = 'SELECT ''' + @table1 + ''' AS TableName, ' + @t1ColumnList + ' FROM ' + @table1 + ' UNION ALL SELECT ''' + @table2 + ''' As TableName, ' + @t2ColumnList + ' FROM ' + @Table2set @SQL1='INSERT INTO '+ @table2 +'SELECT Max(TableName) as TableName, ' +@t1ColumnList + ' FROM (' + @SQL + ') A GROUP BY ' + @t1ColumnList + ' HAVING COUNT(*) = 1'--EXEC @SQL1SELECT LEN(@SQL1),LEN(@SQL2)PRINT (@SQL1)ENDIF(@T2PK=@T1PK)--UPDATE EXISTING RECORDSBEGINset @SQL=''set @Col1Count=(LEN(@t1ColumnList)-LEN(REPLACE(@t1ColumnList,',',''))) + 1set @Col2Count=(LEN(@t2ColumnList)-LEN(REPLACE(@t2ColumnList,',',''))) + 1IF @Col1Count <> @Col2Count PRINT 'Column lists are not same'ELSEBEGINDECLARE @Col1 varchar(50),@Col2 varchar(50)WHILE @t1ColumnList IS NOT NULL AND @t2ColumnList IS NOT NULLBEGINSELECT @Col1=LEFT(@t1ColumnList,CASE WHEN CHARINDEX(',',@t1ColumnList)>0 THEN CHARINDEX(',',@t1ColumnList) ELSE LEN(@t1ColumnList)+1 END -1),@Col2=LEFT(@t2ColumnList,CASE WHEN CHARINDEX(',',@t2ColumnList)>0 THEN CHARINDEX(',',@t2ColumnList) ELSE LEN(@t1ColumnList)+1 END-1)set @SQL2=COALESCE(@SQL2,'')+ @table2+'.'+ @Col1 + '='+ @table1+'.'+@Col2 + ','SELECT @t1ColumnList=SUBSTRING(@t1ColumnList,CASE WHEN CHARINDEX(',',@t1ColumnList)>0 THEN CHARINDEX(',',@t1ColumnList) ELSE NULL END +1,LEN(@t1ColumnList)),@t2ColumnList=SUBSTRING(@t2ColumnList,CASE WHEN CHARINDEX(',',@t2ColumnList)>0 THEN CHARINDEX(',',@t2ColumnList) ELSE NULL END+1,LEN(@t2ColumnList))ENDset @SQL='UPDATE '+ @table2 + ' SET '+ LEFT(@SQL2,LEN(@SQL2)-1) + 'FROM '+ @Table1 --+ ','''+ @Table2 + ''END--Exec (@SQL)SELECT LEN(@SQL)pRINT(@SQLENDGo |
 |
|
LOOKUP_BI
Constraint Violating Yak Guru
295 Posts |
Posted - 2008-02-12 : 09:41:14
|
Upon executing, I receive error Msg 102, Level 15, State 1, Procedure CompareTables, Line 56Incorrect syntax near 'END'. |
 |
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2008-02-12 : 09:42:52
|
quote: Originally posted by LOOKUP_BI Upon executing, I receive error Msg 102, Level 15, State 1, Procedure CompareTables, Line 56Incorrect syntax near 'END'.
put a ) after last PRINTi.e PRINT(@SQL) |
 |
|
LOOKUP_BI
Constraint Violating Yak Guru
295 Posts |
Posted - 2008-02-12 : 09:49:10
|
I receive following output.----------- -----------673 NULL(1 row(s) affected)Person.Address has 19614 rowsPerson.Address.New has 10 rowsNo difference in counts.No Insert took place.I used the following Exec exec CompareTables '[Person].[Address]','[Person.Address.New]','[Person].[Address].[AddressID]','[Person.Address.New].[AddressID]','[AddressID],[AddressLine1],[AddressLine2],[City],[StateProvinceID],[PostalCode],[rowguid],[ModifiedDate]' |
 |
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2008-02-12 : 09:55:09
|
didnt gave me result of print. was it in correct format? |
 |
|
LOOKUP_BI
Constraint Violating Yak Guru
295 Posts |
Posted - 2008-02-12 : 09:59:34
|
Hi Vaisakh,I need to sp, to be able to compare two identical tables [In this case],Person.Address[old] and Person.Address.New[new].Update/Insert to Person.Address.New with Person.Address[old]records.At the end of the day both the tables should be in sync. |
 |
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2008-02-12 : 10:17:12
|
DIdnt get you. i was asking what did the print statement gave you? you need to make sure dynamic sql string is in correct format before executing it. thats why i told to print them out as a debugging measure and see if they are right so that SP executes correctly and synchronises the tables. |
 |
|
LOOKUP_BI
Constraint Violating Yak Guru
295 Posts |
Posted - 2008-02-12 : 10:19:37
|
This wat i receive ----------- -----------673 NULL(1 row(s) affected)INSERT INTO [Person.Address.New]SELECT Max(TableName) as TableName, [AddressID],[AddressLine1],[AddressLine2],[City],[StateProvinceID],[PostalCode],[rowguid],[ModifiedDate] FROM (SELECT '[Person].[Address]' AS TableName, [AddressID],[AddressLine1],[AddressLine2],[City],[StateProvinceID],[PostalCode],[rowguid],[ModifiedDate] FROM [Person].[Address] UNION ALL SELECT '[Person.Address.New]' As TableName, [AddressID],[AddressLine1],[AddressLine2],[City],[StateProvinceID],[PostalCode],[rowguid],[ModifiedDate] FROM [Person.Address.New]) A GROUP BY [AddressID],[AddressLine1],[AddressLine2],[City],[StateProvinceID],[PostalCode],[rowguid],[ModifiedDate] HAVING COUNT(*) = 1 |
 |
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2008-02-12 : 11:17:36
|
this looks ok. so can now try this?CREATE PROCEDURE CompareTables(@table1 varchar(100), @table2 Varchar(100), @T1PK varchar(50),@T2PK varchar(50),@T1ColumnList varchar(1000), @T2ColumnList varchar(1000) = '')ASdeclare @SQL varchar(8000);declare @SQL1 varchar(8000);declare @SQL2 varchar(8000);declare @Col1Count int,@Col2Count intIF @t2ColumnList = '' SET @T2ColumnList = @T1ColumnListIF @T2PK = '' SET @T2PK = @T1PKIF(@T2PK!=@T1PK)--INSERT NEW RECORDBEGINset @SQL = 'SELECT ''' + @table1 + ''' AS TableName, ' + @t1ColumnList + ' FROM ' + @table1 + ' UNION ALL SELECT ''' + @table2 + ''' As TableName, ' + @t2ColumnList + ' FROM ' + @Table2set @SQL1='INSERT INTO '+ @table2 +'SELECT Max(TableName) as TableName, ' +@t1ColumnList + ' FROM (' + @SQL + ') A GROUP BY ' + @t1ColumnList + ' HAVING COUNT(*) = 1'EXEC (@SQL1)ENDIF(@T2PK=@T1PK)--UPDATE EXISTING RECORDSBEGINset @SQL=''set @Col1Count=(LEN(@t1ColumnList)-LEN(REPLACE(@t1ColumnList,',',''))) + 1set @Col2Count=(LEN(@t2ColumnList)-LEN(REPLACE(@t2ColumnList,',',''))) + 1IF @Col1Count <> @Col2Count PRINT 'Column lists are not same'ELSEBEGINDECLARE @Col1 varchar(50),@Col2 varchar(50)WHILE @t1ColumnList IS NOT NULL AND @t2ColumnList IS NOT NULLBEGINSELECT @Col1=LEFT(@t1ColumnList,CASE WHEN CHARINDEX(',',@t1ColumnList)>0 THEN CHARINDEX(',',@t1ColumnList) ELSE LEN(@t1ColumnList)+1 END -1),@Col2=LEFT(@t2ColumnList,CASE WHEN CHARINDEX(',',@t2ColumnList)>0 THEN CHARINDEX(',',@t2ColumnList) ELSE LEN(@t1ColumnList)+1 END-1)set @SQL2=COALESCE(@SQL2,'')+ @table2+'.'+ @Col1 + '='+ @table1+'.'+@Col2 + ','SELECT @t1ColumnList=SUBSTRING(@t1ColumnList,CASE WHEN CHARINDEX(',',@t1ColumnList)>0 THEN CHARINDEX(',',@t1ColumnList) ELSE NULL END +1,LEN(@t1ColumnList)),@t2ColumnList=SUBSTRING(@t2ColumnList,CASE WHEN CHARINDEX(',',@t2ColumnList)>0 THEN CHARINDEX(',',@t2ColumnList) ELSE NULL END+1,LEN(@t2ColumnList))ENDset @SQL='UPDATE '+ @table2 + ' SET '+ LEFT(@SQL2,LEN(@SQL2)-1) + 'FROM '+ @Table1 --+ ','''+ @Table2 + ''ENDExec (@SQL)ENDGo |
 |
|
LOOKUP_BI
Constraint Violating Yak Guru
295 Posts |
Posted - 2008-02-12 : 11:43:37
|
exec CompareTables '[Person].[Address]','[Person.Address.New]','[Person].[Address].[AddressID]','[Person.Address.New].[AddressID]','[AddressID],[AddressLine1],[AddressLine2],[City],[StateProvinceID],[PostalCode],[rowguid],[ModifiedDate]'Im getting the following errorMsg 213, Level 16, State 1, Line 1Insert Error: Column name or number of supplied values does not match table definition. |
 |
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2008-02-12 : 11:57:39
|
seems like a small change is needed . can you delete the code in red and then try executing?CREATE PROCEDURE CompareTables(@table1 varchar(100), @table2 Varchar(100), @T1PK varchar(50),@T2PK varchar(50),@T1ColumnList varchar(1000), @T2ColumnList varchar(1000) = '')ASdeclare @SQL varchar(8000);declare @SQL1 varchar(8000);declare @SQL2 varchar(8000);declare @Col1Count int,@Col2Count intIF @t2ColumnList = '' SET @T2ColumnList = @T1ColumnListIF @T2PK = '' SET @T2PK = @T1PKIF(@T2PK!=@T1PK)--INSERT NEW RECORDBEGINset @SQL = 'SELECT ''' + @table1 + ''' AS TableName, ' + @t1ColumnList + ' FROM ' + @table1 + ' UNION ALL SELECT ''' + @table2 + ''' As TableName, ' + @t2ColumnList + ' FROM ' + @Table2set @SQL1='INSERT INTO '+ @table2 +'SELECT Max(TableName) as TableName, ' +@t1ColumnList + ' FROM (' + @SQL + ') A GROUP BY ' + @t1ColumnList + ' HAVING COUNT(*) = 1'EXEC (@SQL1)END IF(@T2PK=@T1PK)--UPDATE EXISTING RECORDSBEGINset @SQL=''set @Col1Count=(LEN(@t1ColumnList)-LEN(REPLACE(@t1ColumnList,',',''))) + 1set @Col2Count=(LEN(@t2ColumnList)-LEN(REPLACE(@t2ColumnList,',',''))) + 1IF @Col1Count <> @Col2Count PRINT 'Column lists are not same'ELSEBEGINDECLARE @Col1 varchar(50),@Col2 varchar(50)WHILE @t1ColumnList IS NOT NULL AND @t2ColumnList IS NOT NULLBEGINSELECT @Col1=LEFT(@t1ColumnList,CASE WHEN CHARINDEX(',',@t1ColumnList)>0 THEN CHARINDEX(',',@t1ColumnList) ELSE LEN(@t1ColumnList)+1 END -1),@Col2=LEFT(@t2ColumnList,CASE WHEN CHARINDEX(',',@t2ColumnList)>0 THEN CHARINDEX(',',@t2ColumnList) ELSE LEN(@t1ColumnList)+1 END-1)set @SQL2=COALESCE(@SQL2,'')+ @table2+'.'+ @Col1 + '='+ @table1+'.'+@Col2 + ','SELECT @t1ColumnList=SUBSTRING(@t1ColumnList,CASE WHEN CHARINDEX(',',@t1ColumnList)>0 THEN CHARINDEX(',',@t1ColumnList) ELSE NULL END +1,LEN(@t1ColumnList)),@t2ColumnList=SUBSTRING(@t2ColumnList,CASE WHEN CHARINDEX(',',@t2ColumnList)>0 THEN CHARINDEX(',',@t2ColumnList) ELSE NULL END+1,LEN(@t2ColumnList))ENDset @SQL='UPDATE '+ @table2 + ' SET '+ LEFT(@SQL2,LEN(@SQL2)-1) + 'FROM '+ @Table1 --+ ','''+ @Table2 + ''ENDExec (@SQL)ENDGo |
 |
|
LOOKUP_BI
Constraint Violating Yak Guru
295 Posts |
Posted - 2008-02-12 : 12:14:41
|
Some good news....No errors now.Insert of new records works completely fine.BUT When I update some records in Person.Address and execute the stored procedure.I get following error mssg, and changes does not happend.Msg 2627, Level 14, State 1, Line 1Violation of PRIMARY KEY constraint 'PK_Person.Address.New'. Cannot insert duplicate key in object 'dbo.Person.Address.New'.The statement has been terminated. |
 |
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2008-02-12 : 12:27:04
|
Yup. thats understandable. thats because you are passing the pkcol value also along with column list. just pass all columns excluding pk and also change like this.CREATE PROCEDURE CompareTables(@table1 varchar(100), @table2 Varchar(100), @T1PK varchar(50),@T2PK varchar(50),@T1ColumnList varchar(1000), @T2ColumnList varchar(1000) = '')ASdeclare @SQL varchar(8000);declare @SQL1 varchar(8000);declare @SQL2 varchar(8000);declare @Col1Count int,@Col2Count intIF @t2ColumnList = '' SET @T2ColumnList = @T1ColumnListIF @T2PK = '' SET @T2PK = @T1PKIF(@T2PK!=@T1PK)--INSERT NEW RECORDBEGINset @SQL = 'SELECT ''' + @table1 + ''' AS TableName, ' + @t1ColumnList + ' FROM ' + @table1 + ' UNION ALL SELECT ''' + @table2 + ''' As TableName, ' + @t2ColumnList + ' FROM ' + @Table2set @SQL1='INSERT INTO '+ @table2 +'SELECT Max(TableName) as TableName, ' +@t1ColumnList + ' FROM (' + @SQL + ') A GROUP BY ' + @t1ColumnList + ' HAVING COUNT(*) = 1'EXEC (@SQL1)ENDIF(@T2PK=@T1PK)--UPDATE EXISTING RECORDSBEGINset @SQL=''set @Col1Count=(LEN(@t1ColumnList)-LEN(REPLACE(@t1ColumnList,',',''))) + 1set @Col2Count=(LEN(@t2ColumnList)-LEN(REPLACE(@t2ColumnList,',',''))) + 1IF @Col1Count <> @Col2Count PRINT 'Column lists are not same'ELSEBEGINDECLARE @Col1 varchar(50),@Col2 varchar(50)WHILE @t1ColumnList IS NOT NULL AND @t2ColumnList IS NOT NULLBEGINSELECT @Col1=LEFT(@t1ColumnList,CASE WHEN CHARINDEX(',',@t1ColumnList)>0 THEN CHARINDEX(',',@t1ColumnList) ELSE LEN(@t1ColumnList)+1 END -1),@Col2=LEFT(@t2ColumnList,CASE WHEN CHARINDEX(',',@t2ColumnList)>0 THEN CHARINDEX(',',@t2ColumnList) ELSE LEN(@t1ColumnList)+1 END-1)set @SQL2=COALESCE(@SQL2,'')+ @table2+'.'+ @Col1 + '='+ @table1+'.'+@Col2 + ','SELECT @t1ColumnList=SUBSTRING(@t1ColumnList,CASE WHEN CHARINDEX(',',@t1ColumnList)>0 THEN CHARINDEX(',',@t1ColumnList) ELSE NULL END +1,LEN(@t1ColumnList)),@t2ColumnList=SUBSTRING(@t2ColumnList,CASE WHEN CHARINDEX(',',@t2ColumnList)>0 THEN CHARINDEX(',',@t2ColumnList) ELSE NULL END+1,LEN(@t2ColumnList))ENDset @SQL='UPDATE '+ @table2 + ' SET '+ LEFT(@SQL2,LEN(@SQL2)-1) + 'FROM '+ @Table1 + 't1 WHERE ' + @T1PK + ' = t1.' + @T2PKENDExec (@SQL)END Go |
 |
|
LOOKUP_BI
Constraint Violating Yak Guru
295 Posts |
Posted - 2008-02-12 : 12:36:18
|
Use the updated sp, Let me confirm execute as exec CompareTables '[Person].[Address]','[Person.Address.New]','[AddressID],[AddressLine1],[AddressLine2],[City],[StateProvinceID],[PostalCode],[rowguid],[ModifiedDate]'ErrorMsg 201, Level 16, State 4, Procedure CompareTables, Line 0Procedure or function 'CompareTables' expects parameter '@T2PK', which was not supplied. |
 |
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2008-02-12 : 12:37:41
|
This is what is to be used:-exec CompareTables '[Person].[Address]','[Person.Address.New]','[Person].[Address].[AddressID]','[Person.Address.New].[AddressID]','[AddressLine1],[AddressLine2],[City],[StateProvinceID],[PostalCode],[rowguid],[ModifiedDate]' |
 |
|
LOOKUP_BI
Constraint Violating Yak Guru
295 Posts |
Posted - 2008-02-12 : 12:40:30
|
Error Msg 245, Level 16, State 1, Line 1Conversion failed when converting the varchar value '[Person].[Address]' to data type int. |
 |
|
Next Page
|
|
|