2014-09-02 127 views
0

我有一個查詢,我試圖選擇另一行的內容並將其插入到表中,但更改特定的值。在這裏我試圖使用Replace()函數替換給定列中的某些字符。SQL Server的 - 插入選擇

這是正確的,還是我需要把它拿出來,並通過Update聲明來做到這一點?

這是我的SQL語句:

INSERT INTO [dbo].[PurchaseLogic] 
     ([column1] 
     ,[column2] 
     ,[column3] 
     ,[column4]) 
SELECT [column1] 
     ,[column2] 
     ,replace(column3, 'TextA','TextB') 
     ,[column4] 
FROM dbo.purchaselogic 
WHERE column1 = 1 

漢克斯

編輯

對不起,這是在執行時,我收到錯誤:

參數的數據類型文本對替換函數的參數1無效。

+2

看起來正確。你有什麼問題嗎? – 2014-09-02 13:27:50

+0

這將工作,因爲你的替換是在你的select語句中調用的。 – Donal 2014-09-02 13:28:47

+0

哪裏是錯誤?????你首先想要什麼??? – mohan111 2014-09-02 13:29:03

回答

2

這看起來對我來說是正確的,應該做你想做的事情。但是有沒有什麼原因可以讓你自己無法嘗試並檢查結果?

如果Column3是'Text'的數據類型,由於Replace不適用於該數據類型,因此無法工作。您可以將數據類型轉換爲nvarchar(max)以使其工作。例如:

Replace(Cast(column3 as varchar(max)),'TextA','TextB') 
+0

對不起,我更新了我收到的消息 – user667430 2014-09-02 13:29:49

+0

@ user667430 - 我根據您的新信息更新了我的答案。 – 2014-09-02 13:32:12

1
INSERT INTO [dbo].[PurchaseLogic] 
     ([column1] 
     ,[column2] 
     ,[column3] 
     ,[column4]) 
SELECT [column1] 
     ,[column2] 
     ,CAST(REPLACE(CAST(column3 as Varchar(MAX)),'TextA','TextB') AS Text) 
     ,[column4] 
FROM dbo.purchaselogic 
WHERE column1 = 1 

我得到了它essense here

1

欄3是TEXT列,你需要將它轉換爲VARCHAR(MAX)使用REPLACE功能:

INSERT INTO [dbo].[PurchaseLogic] 
     ([column1] 
     ,[column2] 
     ,[column3] 
     ,[column4]) 
SELECT [column1] 
     ,[column2] 
     ,REPLACE(CAST(column3 AS VARCHAR(MAX)), 'TextA','TextB') 
     ,[column4] 
FROM dbo.purchaselogic 
WHERE column1 = 1 
0
INSERT INTO [dbo].[PurchaseLogic] 
     ([column1] 
     ,[column2] 
     ,[column3] 
     ,[column4]) 
SELECT [column1] 
     ,[column2] 
     ,cast(replace(cast(column3 as nvarchar(max)),'TextA','TextB') as ntext) 
     ,[column4] 
FROM dbo.purchaselogic 
WHERE column1 = 1 
+0

如果'column3'是'TEXT',你不應該將它轉換爲'NVARCHAR(MAX)'(而是使用'varchar(max)') – 2014-09-02 13:35:37

+0

yes你是對的@ marc_s ..我們不知道確切的數據..任何一點記下來... – mohan111 2014-09-02 13:39:02

+1

我們知道**確切的數據類型 - 錯誤信息**清楚地說**它是'文本'(非Unicode)類型.... – 2014-09-02 13:53:26

0

上面提出的各種解決方案應該使查詢w ork,但是如果你打算定期做這類事情,至少應該考慮在源代碼中修復問題並更改[dbo]的數據類型。[PurchaseLogic]。[column3]到VARCHAR(MAX)

您可以通過創建一個新表,將數據插入到它做到這一點使用ALTER TABLE命令位我可能會做

CREATE TABLE [dbo].[PurchaseLogic_new] 
(
[column1] int, 
[column2] int, 
[column3] varchar(max), 
[column4] int 
)  
INSERT INTO dbo.PurchaseLogic_new ([column1],[column2],[column3],[column4]) 
SELECT [column1],[column2],[column3],[column4] FROM [dbo].[PurchaseLogic] 

一旦這樣做了,你可以換名字輪

EXEC sp_rename 'dbo.PurchaseLogic','PurchaseLogic_old','OBJECT' 
EXEC sp_rename 'dbo.PurchaseLogic_new','PurchaseLogic','OBJECT' 

然後您可以通過交換名稱來退出更改

EXEC sp_rename 'dbo.PurchaseLogic','PurchaseLogic_new','OBJECT' 
EXEC sp_rename 'dbo.PurchaseLogic_old','PurchaseLogic','OBJECT'