2014-09-02 123 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'