从 table 中的列中删除字符的存储过程不起作用
Stored Procedure to remove characters from a column in a table, does not work
我正在尝试编写一个存储过程,我可以向其传递一个列名和一个不需要的字符,该存储过程将删除该列中该不需要的字符的所有实例。
以下 SQL 是我的存储过程的基础,当我从 SQL Server Management Studio 执行它时,它可以工作:
UPDATE MyTable
SET MyField = REPLACE(MyField, 'T', '');
但是如果我写一个存储过程,那么:
CREATE PROCEDURE uspRemoveCharFromColumn
@Fieldname nvarchar(50),
@UnwantedChar char(1)
AS
BEGIN
UPDATE MyTable
SET @Fieldname = REPLACE(@Fieldname, @UnwantedChar, '');
END
并执行它,因此:
EXEC uspRemoveCharFromColumn 'ADDR', 'T';
SELECT ADDR
FROM MyTable
WHERE ADDR LIKE '%T%';
我发现 "T" 中的 none 已从该列的任何字段内容中删除。
我花了最后 45 分钟 Google-ing 是因为我的存储过程无法正常工作,结果是空的。有人可以帮忙吗?
使用动态 SQL:
您正在尝试将 Column_Name 作为参数传递,因此您需要使用 Dynamic_SQl
CREATE PROCEDURE uspRemoveCharFromColumn
@Fieldname nvarchar(50),
@UnwantedChar char(1)
AS
BEGIN
declare @qry varchar(max)
Set @qry ='UPDATE MyTable
SET '+ @Fieldname +'= REPLACE('+@Fieldname+','''+@UnwantedChar+''', '''')'
EXECUTE(@qry)
END
在更新查询中将列名放入变量中不会更新table中的列数据。您需要通过附加列名来格式化查询。然后使用 sp_executesql
执行查询
使用 'EXECUTE' 命令可以打开 SQL 注入。使用 sp_execute 命令保护自己免受 SQL 注入。
ALTER PROCEDURE uspRemoveCharFromColumn
@Fieldname nvarchar(50),
@UnwantedChar char(1)
AS
BEGIN
DECLARE @qry NVARCHAR(MAX);
DECLARE @paramDefinition NVARCHAR(500) = '@Fieldname VARCHAR(50), @UnwantedChar VARCHAR(5)';
SET @qry ='UPDATE MyTable SET @Fieldname = REPLACE(@Fieldname,@UnwantedChar,'''')';
EXEC sp_executesql @qry,@paramDefinition,@Fieldname,@UnwantedChar;
END
我正在尝试编写一个存储过程,我可以向其传递一个列名和一个不需要的字符,该存储过程将删除该列中该不需要的字符的所有实例。
以下 SQL 是我的存储过程的基础,当我从 SQL Server Management Studio 执行它时,它可以工作:
UPDATE MyTable
SET MyField = REPLACE(MyField, 'T', '');
但是如果我写一个存储过程,那么:
CREATE PROCEDURE uspRemoveCharFromColumn
@Fieldname nvarchar(50),
@UnwantedChar char(1)
AS
BEGIN
UPDATE MyTable
SET @Fieldname = REPLACE(@Fieldname, @UnwantedChar, '');
END
并执行它,因此:
EXEC uspRemoveCharFromColumn 'ADDR', 'T';
SELECT ADDR
FROM MyTable
WHERE ADDR LIKE '%T%';
我发现 "T" 中的 none 已从该列的任何字段内容中删除。
我花了最后 45 分钟 Google-ing 是因为我的存储过程无法正常工作,结果是空的。有人可以帮忙吗?
使用动态 SQL:
您正在尝试将 Column_Name 作为参数传递,因此您需要使用 Dynamic_SQl
CREATE PROCEDURE uspRemoveCharFromColumn
@Fieldname nvarchar(50),
@UnwantedChar char(1)
AS
BEGIN
declare @qry varchar(max)
Set @qry ='UPDATE MyTable
SET '+ @Fieldname +'= REPLACE('+@Fieldname+','''+@UnwantedChar+''', '''')'
EXECUTE(@qry)
END
在更新查询中将列名放入变量中不会更新table中的列数据。您需要通过附加列名来格式化查询。然后使用 sp_executesql
执行查询使用 'EXECUTE' 命令可以打开 SQL 注入。使用 sp_execute 命令保护自己免受 SQL 注入。
ALTER PROCEDURE uspRemoveCharFromColumn
@Fieldname nvarchar(50),
@UnwantedChar char(1)
AS
BEGIN
DECLARE @qry NVARCHAR(MAX);
DECLARE @paramDefinition NVARCHAR(500) = '@Fieldname VARCHAR(50), @UnwantedChar VARCHAR(5)';
SET @qry ='UPDATE MyTable SET @Fieldname = REPLACE(@Fieldname,@UnwantedChar,'''')';
EXEC sp_executesql @qry,@paramDefinition,@Fieldname,@UnwantedChar;
END