我正在尝试使用Visual Studio 2012中的数据库项目来播种我的数据库。作为我的Post Deployment脚本的park,我有一个类似于以下内容的声明:
INSERT INTO SomeTable (SomeTextCol) Values (N'$(function(){});')
该列定义为NVARCHAR(MAX)
这会导致post build事件失败。然而奇怪的是,如果我使用SSMS执行语句就会成功。
这是因为数据库项目在后台使用SQLCMD吗?
如何修复此错误(同时仍然能够将jQuery插入表中) - 更改列值对我来说不是一个选项,因为我没有架构。
答案 0 :(得分:2)
你是对的,这是由sqlcmd导致的,$是一个特殊字符。 解决这个问题的一个解决方案是连接两个字符串:
INSERT INTO SomeTable (SomeTextCol) Values (N'$'+'(function(){});');
这有点难看,但它确实有效。另一种方法是为jQuery使用不同的符号,如其完整名称:
INSERT INTO SomeTable (SomeTextCol) Values (N'jQuery(function(){});');
或者,如果你在函数中有很多对jQuery的引用:
(function(JQ){
JQ(
function(){
//other references to JQ
}
);
}
)(jQuery);
最后一个解决方案的另一个优势是,在页面上任何其他地方定义$
或JQ
的任何人都不会破坏您的代码,因为“您的”JQ
是在闭包中定义的仅对您的代码可见。