|
|
|
SSC Rookie
      
Group: General Forum Members
Last Login: Monday, May 06, 2013 9:31 AM
Points: 46,
Visits: 34
|
|
small modification for multiple tables to run at once
alter PROC p_adm_gen_insert (@TableList varchar (8000) ) AS SET NOCOUNT ON DECLARE @position int, @exec_str varchar (2000), @TableName varchar (50) DECLARE @name varchar(128), @xtype int, @status tinyint, @IsIdentity tinyint DECLARE @ColumnList varchar(8000) SET @ColumnList='' SELECT @TableList = @TableList + ',' SELECT @IsIdentity = 0 SELECT @position = PATINDEX('%,%', @TableList) WHILE (@position <> 0) BEGIN
SELECT @TableName = SUBSTRING(@TableList, 1, @position - 1) SELECT @TableList = STUFF(@TableList, 1, PATINDEX('%,%', @TableList),'') SELECT @position = PATINDEX('%,%', @TableList) SET @ColumnList = '' SELECT @exec_str = 'DECLARE fetch_cursor CURSOR FOR SELECT a.name, a.xtype, a.status FROM syscolumns a, sysobjects b WHERE a.id = b.id and b.name = ''' + @TableName + '''' EXEC (@exec_str) --print @exec_str OPEN fetch_cursor FETCH fetch_cursor INTO @name, @xtype, @status IF (@status & 0x80) <> 0 BEGIN SELECT @IsIdentity = 1 SELECT 'SET IDENTITY_INSERT ' + @TableName + ' ON' SELECT 'GO' END SET @ColumnList=@ColumnList + @name +',' --SELECT @exec_str = 'SELECT ''INSERT INTO ' + @TableName + ' VALUES ('' + ' SET @exec_str = '' Select ' -- The table name is: ' + @TableName --text or ntext IF (@xtype = 35) OR (@xtype = 99) SELECT @exec_str = @exec_str + '''"None yet"''' ELSE
--image IF (@xtype = 34) SELECT @exec_str = @exec_str + '"' + '0xFFFFFFFF' + '"' ELSE
--smalldatetime or datetime IF (@xtype = 58) OR (@xtype = 61) SELECT @exec_str = @exec_str + 'Coalesce( + '''''''' + CONVERT(varchar,' + @name + ',109)' + ' + ''''''''' + ',''null'')' ELSE
--varchar or char or nvarchar or nchar IF (@xtype = 167) OR (@xtype = 175) OR (@xtype = 231) OR (@xtype = 239) SELECT @exec_str = @exec_str + 'Coalesce(' + ''''''''' + ' + @name + ' + ''''''''' + ',''null'')' ELSE
--uniqueidentifier IF (@xtype = 36) SELECT @exec_str = @exec_str + ' + Coalesce('''''''' + ' + ' + CONVERT(varchar(255),' + @name + ')' + ' + ''''''''' + ',''null'')' ELSE
--binary or varbinary IF (@xtype = 173) OR (@xtype = 165) SELECT @exec_str = @exec_str + '"' + '0x0' + '"' ELSE
SELECT @exec_str = @exec_str + 'Coalesce(CONVERT(varchar,' + @name + '), ''null'')'
WHILE @@FETCH_STATUS <> -1 BEGIN FETCH fetch_cursor INTO @name, @xtype, @status IF (@@FETCH_STATUS = -1) BREAK IF (@status & 0x80) <> 0 BEGIN SELECT @IsIdentity = 1 SELECT 'SET IDENTITY_INSERT ' + @TableName + ' ON' SELECT 'GO' END
SET @ColumnList=@ColumnList + @name +','
--text or ntext IF (@xtype = 35) OR (@xtype = 99) SELECT @exec_str = @exec_str + ' + '',''' + ' + ''"None yet"''' ELSE
--image IF (@xtype = 34) SELECT @exec_str = @exec_str + ' + '','' + ' + '"' + '0xFFFFFFFF' + '"' ELSE
--smalldatetime or datetime IF (@xtype = 58) OR (@xtype = 61) SELECT @exec_str = @exec_str + ' + '',''' + ' + Coalesce('''''''' + ' + ' + CONVERT(varchar,' + @name + ',109)' + ' + ''''''''' + ',''null'')' ELSE
--varchar or char or nvarchar or nchar IF (@xtype = 167) OR (@xtype = 175) OR (@xtype = 231) OR (@xtype = 239) SELECT @exec_str = @exec_str + ' + '',''' + ' + Coalesce('''''''' + replace(' + @name + ' COLLATE database_default,'''''''','''''''''''') + ''''''''' + ',''null'')' ELSE
--uniqueidentifier IF (@xtype = 36) SELECT @exec_str = @exec_str + ' + '',''' + ' + Coalesce('''''''' + ' + ' + CONVERT(varchar(255),' + @name + ')' + ' + ''''''''' + ',''null'')' ELSE
--binary or varbinary IF (@xtype = 173) OR (@xtype = 165) SELECT @exec_str = @exec_str + ' + '','' + ' + '"' + '0x0' + '"' ELSE
SELECT @exec_str = @exec_str + ' + '',''' + ' + Coalesce(CONVERT(varchar,' + @name + '), ''null'')' END
CLOSE fetch_cursor DEALLOCATE fetch_cursor
SELECT @exec_str = 'SELECT ''INSERT INTO ' + @TableName +'('+substring(@ColumnList,1,len(@ColumnList)-1) + ') VALUES ('' + ' + @exec_str + '+ '')'' FROM ' + @TableName EXEC(@exec_str) --print (@exec_str) SELECT 'GO'
IF @IsIdentity = 1 BEGIN SELECT @IsIdentity = 0 SELECT 'SET IDENTITY_INSERT ' + @TableName + ' OFF' SELECT 'GO' END END
--print @ColumnList
|
|
|
|
|
Grasshopper
      
Group: General Forum Members
Last Login: Friday, May 03, 2013 12:27 PM
Points: 21,
Visits: 42
|
|
| I believe the problem with the original statement was how SQL Server handles single. vs. double quotes. In your code, SQL Server was getting confused between the single quote starting the data value and the double quote included within the data value.. The SET QUOTED IDENTIFIER setting would only affect that as intended if the double quotes were only around the outside of the whole command string. The solution (doubling up the single quotes) has always worked, but can be annoying in some situations and can make the code hard to read. Sometimes you even need three or more single quotes to achieve the desired results.
|
|
|
|