【发布时间】:2017-03-15 01:14:44
【问题描述】:
我正在使用 sql server
我想使用 T-sql 将存储过程从一个数据库复制到另一个数据库, 但我的存储过程包含动态 sql。
我从sys.sql_modules 获取定义并使用此代码执行它
exec sp_executesql @sp_definition
但它给了我错误:
消息 102,级别 15,状态 1,第 23 行 ' + @tblName + ' 附近的语法不正确
我的存储过程示例
CREATE Procedure insertRow
(
@tblName nvarchar(250),
@value nvarchar(250)
)
AS
DECLARE @script nvarchar(1000)
SET @script='INSERT INTO '+@tblName +' VALUES('+@value+')'
exec @script
如何转义引号以成功执行它
【问题讨论】:
-
你能给我们举个例子吗??
-
但它给了我错误不是很清楚。尝试打印出
@sp_definition的内容并尝试直接执行。你有同样的错误吗?由于您的动态 SQL,可能连接到 内部引号... -
既然它给你错误,你应该给我们错误——有点帮助
-
Msg 102, Level 15, State 1, Line 23 ' + @tblName + ' 附近的语法不正确
-
该错误是因为您没有正确拼写 VALUES。谢天谢地,这失败了,或者您可能实际上在您的系统中使用了它。这个存储过程很容易受到 sql 注入攻击。这是尝试创建“一个程序来统治所有这些”的示例。不要对自己这样做。为所有表创建一个插入过程,并避免像这样直接执行输入值的动态 sql。我的朋友鲍比桌喜欢这种东西。 bobby-tables.com
标签: sql-server stored-procedures dynamic copy