Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE FUNCTION system.GenerateMERGE
- (
- @TABLESCHEMA NAME,
- @TABLENAME NAME
- )
- RETURNS VARCHAR(MAX)
- AS
- BEGIN
- DECLARE @RV VARCHAR(MAX) = ''
- DECLARE @CRLF VARCHAR(2) = CHAR(13)+CHAR(10)
- DECLARE @TAB VARCHAR(1) = CHAR(9)
- DECLARE @IDENT BIT = (SELECT OBJECTPROPERTY(OBJECT_ID(@TABLESCHEMA+'.'+@TABLENAME), 'TableHasIdentity'))
- IF @IDENT != 0 SELECT @RV = 'SET IDENTITY_INSERT '+@TABLESCHEMA+'.'+@TABLENAME+' ON'+@CRLF
- SELECT @RV = @RV + 'MERGE INTO '+@TABLESCHEMA+'.'+@TABLENAME+' D'+@CRLF+
- 'USING (<enter source query here>) S'+@CRLF+'ON '
- SELECT @RV = @RV+'S.'+PK.TABLE_FIELD+' = D.'+TABLE_FIELD+' AND '
- FROM system.PKCOLS PK
- WHERE PK.TABLE_SCHEMA = @TABLESCHEMA AND PK.TABLE_NAME = @TABLENAME
- ORDER BY PK.ORDINAL_POSITION
- SELECT @RV = LEFT(@RV, LEN(@RV) - 4)+@CRLF
- SELECT @RV = @RV+'WHEN MATCHED UPDATE SET'+@CRLF
- SELECT @RV = @RV+@TAB+C.COLUMN_NAME+' = S.'+C.COLUMN_NAME+','+@CRLF
- FROM INFORMATION_SCHEMA.COLUMNS C
- LEFT JOIN system.PKCOLS PK ON PK.TABLE_SCHEMA = C.TABLE_SCHEMA AND PK.TABLE_NAME = C.TABLE_NAME AND PK.TABLE_FIELD = C.COLUMN_NAME
- WHERE C.TABLE_SCHEMA = @TABLESCHEMA AND C.TABLE_NAME = @TABLENAME AND PK.TABLE_FIELD IS NULL
- AND COLUMNPROPERTY(OBJECT_ID(@TABLESCHEMA+'.'+@TABLENAME), C.COLUMN_NAME, 'IsComputed') = 0
- ORDER BY C.ORDINAL_POSITION
- SELECT @RV = LEFT(@RV, LEN(@RV) - 3)+@CRLF
- SELECT @RV = @RV+'WHEN NOT MATCHED'+@CRLF+@TAB+'INSERT ('
- SELECT @RV = @RV+C.COLUMN_NAME+', '
- FROM INFORMATION_SCHEMA.COLUMNS C
- LEFT JOIN system.PKCOLS PK ON PK.TABLE_SCHEMA = C.TABLE_SCHEMA AND PK.TABLE_NAME = C.TABLE_NAME AND PK.TABLE_FIELD = C.COLUMN_NAME
- WHERE C.TABLE_SCHEMA = @TABLESCHEMA AND C.TABLE_NAME = @TABLENAME
- AND COLUMNPROPERTY(OBJECT_ID(@TABLESCHEMA+'.'+@TABLENAME), C.COLUMN_NAME, 'IsComputed') = 0
- ORDER BY C.ORDINAL_POSITION
- SELECT @RV = LEFT(@RV, LEN(@RV) - 1)+')'+@CRLF+@TAB+'VALUES ('
- SELECT @RV = @RV+'S.'+C.COLUMN_NAME+', '
- FROM INFORMATION_SCHEMA.COLUMNS C
- LEFT JOIN system.PKCOLS PK ON PK.TABLE_SCHEMA = C.TABLE_SCHEMA AND PK.TABLE_NAME = C.TABLE_NAME AND PK.TABLE_FIELD = C.COLUMN_NAME
- WHERE C.TABLE_SCHEMA = @TABLESCHEMA AND C.TABLE_NAME = @TABLENAME
- AND COLUMNPROPERTY(OBJECT_ID(@TABLESCHEMA+'.'+@TABLENAME), C.COLUMN_NAME, 'IsComputed') = 0
- ORDER BY C.ORDINAL_POSITION
- SELECT @RV = LEFT(@RV, LEN(@RV) - 1)+');'+@CRLF
- IF @IDENT != 0 SELECT @RV = @RV+'SET IDENTITY_INSERT '+@TABLESCHEMA+'.'+@TABLENAME+' OFF'+@CRLF
- RETURN @RV
- END
- GO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement