2009-06-05 4 views

Antwort

6

ich ein ähnliches hatte zu bewegen Anforderung.

Skriptanweisungen für jede Zeile in einer Tabelle einfügen. Manchmal brauchte ich die Identität Spalte, manchmal nicht.

So schrieb ich folgendes:

CREATE PROCEDURE [dbo].[GenerateInsertScripts] (
    @tableName varchar(100), 
    @tableSchema varchar(50) = 'dbo', 
    @skipIdentity bit = 1 
) 
AS 
BEGIN 
    DECLARE @columnName varchar(800) 
    DECLARE @columnType varchar(20) 
    DECLARE @statementA varchar(MAX) 
    DECLARE @statementB varchar(MAX) 
    DECLARE @statement nvarchar(MAX) 
    DECLARE @isIdentity bit 
    DECLARE @commaFlag bit 

    SET @statementA = 'INSERT INTO [' + @tableSchema + '].[' + @tableName + '] (' 
    SET @statementB = ''' + ' 

    DECLARE cols CURSOR FOR 
    SELECT 
     COLUMN_NAME, 
     DATA_TYPE, 
     (SELECT COLUMNPROPERTY(OBJECT_ID('[' + @tableSchema + '].[' + @tableName + ']'), 
     information_schema.columns.COLUMN_NAME, 'IsIdentity')) AS IsIdentity 
    FROM 
     information_schema.columns 
    WHERE 
     TABLE_NAME = @tableName 
     AND 
     TABLE_SCHEMA = @tableSchema 
    ORDER BY 
     ORDINAL_POSITION 

    OPEN cols 
    FETCH cols INTO @columnName, @columnType, @isIdentity 
    SET @commaFlag = 0 
    WHILE @@FETCH_STATUS = 0 
    BEGIN 
     IF NOT (@isIdentity = 1 AND @skipIdentity = 1) BEGIN 
     IF @commaFlag = 1 BEGIN 
      SET @statementA = @statementA + ', ' 
      SET @statementB = @statementB + ' + '', '' + ' 
     END 
     SET @commaFlag = 1 

     SET @statementA = @statementA + '[' + @columnName + ']' 
     SET @statementB = @statementB + 'CASE WHEN [' + @columnName + '] IS NULL THEN ''NULL'' ELSE ' + 
     CASE 
      WHEN @columnType = 'bigint' OR @columnType = 'int' OR @columnType = 'tinyint' OR @columnType = 'bit' THEN 
       'CAST([' + @columnName + '] AS varchar(MAX))' 
      WHEN @columnType = 'datetime' THEN 
       ''''''''' + CONVERT(varchar, [' + @columnName + '], 121) + ''''''''' 
      ELSE 
       ''''''''' + REPLACE(CAST([' + @columnName + '] AS varchar(MAX)), '''''''', '''''''''''') + ''''''''' 
     END 

     + ' END' 
     END 
    FETCH cols INTO @columnName, @columnType, @isIdentity 
    END 
    SET @commaFlag = 0 
    CLOSE cols 
    DEALLOCATE cols 

    SET @statementB = @statementB + ' + ''' 

    SET @statement = 'SELECT ''' + @statementA + ') VALUES (' + @statementB + ')'' [Statement] FROM [' + @tableSchema + '].[' + @tableName + ']' 

    EXEC sp_executesql @statement 
END 
+1

Vielen Dank Sir, genau das, was ich brauchte! Du bekommst die Antwort-Stimme, weil der Code hier und klar als Tag ist :) – CubanX

+1

+1, wie kannst du die "richtige" Antwort haben bu keine einzige Abstimmung? Ich hasse es wenn mir das passiert, also +1 an dich! –

+0

+1! Cmon Jungs, +1 diese Antwort! Hat mir auch sehr geholfen, da ich kein SQL-Spezialist bin, dachte ich darüber nach, wie ich das machen würde, wie ich mit sys-Tischen interagieren würde, aber da hast du es schon getan! Vielen Dank John. – Smur

0

Wenn Sie Daten in eine andere Datenbank oder eine andere Datei verschieben, verwenden Sie SSIS. Wenn die Aufgabe nicht komplex ist, verwenden Sie den Assistenten, klicken Sie mit der rechten Maustaste auf den Database-Namen, gehen Sie zu Taks und wählen Sie Daten exportieren.

Wenn Sie die ganze Datenbank tun, ist eine Alternative, einfach die letzte Sicherung am anderen Ort wiederherzustellen.

3

Verwendung dieses große Skript:

http://vyaskn.tripod.com/code.htm#inserts

aber dies ist ein schlechter Weg, um Daten zu bewegen, gut zu helfen, ein Problem zu beheben oder ein wenig Testdaten usw.

+1

Je nachdem, welche Umgebung er verwendet, ist dies möglicherweise die einzige Möglichkeit, Daten zu verschieben. Ich musste meine Methode verwenden, um Daten von den GoDaddy-Servern zu erhalten. –

+0

KM, ich stimme zu, aber John, ist genau richtig. Nur so kann ich die Daten leicht verschieben. – CubanX

0

Für SQL Server 2008 Sie die Script Data Option im Generieren Scripts-Assistenten verwenden können. Nicht für 2005.

Sie können den Assistenten starten, indem Sie im Objekt-Explorer in SSMS mit der rechten Maustaste auf eine Datenbank klicken und dann Tasks ->Generate Scripts....

Verwandte Themen