【问题标题】:Copy stored procedure from one database to another using T-sql使用 T-sql 将存储过程从一个数据库复制到另一个数据库
【发布时间】: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


【解决方案1】:

解决方案是正确转义引号并使用 ''' 而不是只使用一个引号

【讨论】:

    猜你喜欢
    • 2012-05-29
    • 2011-03-16
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 2021-02-28
    • 1970-01-01
    相关资源
    最近更新 更多