2009-06-05 42 views

回答

6

我也有類似需求。

要腳本爲表中的每一行插入語句。有時候我需要身份專欄,有時候我不需要。

所以,我寫了這個:

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 
0

如果要將數據移動到不同的數據庫或某種文件,請使用SSIS。如果任務不復雜,請使用該向導,右鍵單擊datbasename,進入taks並選擇導出數據。

如果您正在執行整個數據庫,另一種方法是簡單地恢復其他位置的最新備份。

3

使用這個偉大的腳本:

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

但這是移動數據一個糟糕的方式,很好地幫助解決問題或移動一個小的測試數據等

+1

取決於他正在使用的環境,這可能是他移動數據的唯一方法。我必須使用下面的方法從GoDaddy的服務器獲取數據。 – 2009-06-05 17:48:56

+0

KM,我同意,但約翰,是現貨。這是我可以輕鬆移動數據的唯一方法。 – CubanX 2009-06-05 17:57:41

0

對於SQL Server 2008,你可以使用生成腳本嚮導Script Data選項。但不是2005年。

您可以通過右鍵單擊SSMS中對象資源管理器中的數據庫啓動向導,然後TasksGenerate Scripts...

相關問題