Quando faço o script de dados em meu banco de dados em Tarefas do SSMS->Gerar scripts e, em seguida, seleciono somente dados, verifica-se que as instruções de inserção são geradas em ordem diferente sempre que ocorre uma pequena alteração. Isso torna impossível para os desenvolvedores executar um programa diff com os dados do script anterior e ver as alterações de dados: todas as tabelas são sempre reembaralhadas, mesmo que nenhuma linha tenha sido inserida/excluída, de modo que um programa diff não pode realmente mostrar o poucas alterações de dados de maneira coerente.
Existe uma maneira de criar um script de dados em um banco de dados para que eles retornem aproximadamente a mesma ordem se não ocorrerem adições/exclusões de dados importantes que possam afetar a ordem?
Eu pessoalmente usaria uma ferramenta (como de fato já uso), como as vendidas pela Apex, Red Gate, Toad e outras. Eles podem ser usados para fazer o script apenas das linhas que foram alteradas. Isso tornaria sua busca por mudanças muito simples.
Se você estiver procurando por uma ferramenta gratuita, você pode examinar http://opendbiff.codeplex.com/ . Eu pessoalmente não o usei, mas algumas pessoas acham útil. (Existem, sem dúvida, outras ferramentas desse tipo em domínio público.)
Se por "dados de script" você quer dizer "gerar instruções INSERT", geralmente eu usaria algo parecido com o pseudocódigo:
Inclua instruções SET INDENTITY_INSERT conforme necessário e assim por diante.
Provavelmente, você também pode usar o Profiler para capturar o SQL que o Generate Scripts está executando, se quiser começar com isso.
Você pode querer examinar o procedimento armazenado listado na resposta que @NeerajPrasadSharma deu a Como gerar um script INSERT para uma tabela existente do SQL Server que inclui todas as linhas armazenadas?
O que acabei fazendo é o seguinte:
O resultado parece ser mais determinístico do que o do SSMS após minhas poucas tentativas. Eu espero que isso continue assim.