2009-06-29 97 views
3

我們有一個用於用戶設置的SQL Server表。最初這些設置是域對象,它們已經被序列化爲表格中的XML,但我們最近開始將它們作爲二進制序列化。手動插入varbinary數據到SQL Server

但是,作爲我們部署過程的一部分,我們靜態地爲我們的用戶預先填充了預定義的設置表。最初,這很簡單,只需從定製數據庫複製XML並將其粘貼到構建數據庫後運行的INSERT語句中即可。但是,由於我們已經將設置存儲爲二進制數據,因此我們無法使其工作。

我們如何從SQL Server中的varbinary列中提取二進制數據並將其粘貼到靜態INSERT腳本中?我們只想爲此使用SQL,我們不想使用任何實用程序。

由於提前, 傑里米

+0

感謝所有響應時被添加,但我們決定只需使用SQL批量複製實用程序將二進制數據作爲.dat文件進行打包即可。 – 2009-06-30 12:22:42

回答

1

我相信你行與像查詢分析器/管理CHINESE Studio工具?

您可以複製並粘貼select語句返回的二進制值(確保您返回的數據充足),並在腳本中以「0x」作爲前綴。

+0

嗨大衛, 感謝您的建議。我們實際上已經嘗試過,但是我們不斷地在字符串中插入附加的尾隨0。這導致我們試圖反序列化的結果對象無效。 – 2009-06-30 12:21:52

+0

你確定它是一個varbinary而不是二進制列嗎? – 2009-06-30 13:02:34

3

您可能會發現更容易儲存在配置表中的模板值的地方,然後將其讀入一個變量,並使用該變量來填補你的刀片:

DECLARE @v varbinary(1000) 
SELECT @v = templatesettings from configtable 

INSERT INTO usertable VALUES(name, @v, ....) 
0

如果我理解正確的話,你想從您的數據生成一個靜態腳本。如果是這樣,請考慮對連接字符串的舊數據執行查詢以形成腳本中需要的SQL語句。

首先,找出你想讓腳本結果看起來像什麼。請注意,您需要將您要插入的值視爲常量。例如:

INSERT INTO NewTable VALUES 'value1', 'value2' 

現在,創建舊的數據,只是讓你將要移動的值,這樣的查詢:

SELECT value1, value2 
FROM OldTable 

最後,更新您的查詢的SELECT語句產生在輸出你以前的形式單一的連接字符串定義:

SELECT 'INSERT INTO NewTable VALUES ''' + value1 + ''', ''' + value2 + '''' 
FROM OldTable 

這是一個做生意的令人費解的方式,但它能夠完成任務。你需要密切關注細節。它將允許一個小的(但令人困惑的)查詢來快速輸出非常大量的靜態DML語句。

2

從SQL Server 2008開始,您可以使用任務>生成腳本並選擇包含數據。這爲您提供了表中所有行的INSERT語句,您可以根據需要進行修改。

Here's the steps for SQL 2008。請注意,SQL 2008 R2中的「腳本數據」選項被稱爲「腳本數據類型」,而不是「腳本數據」。