SQL数据项目:语法错误' $('

时间:2013-10-15 16:14:39

标签: sql visual-studio-2012 escaping localdb

我有一个从我的生产数据库的模式创建的SQL数据项目。它将所有存储过程引入到项目中,并且我尝试将生成的脚本部署到localdb以进行脱机开发。

问题是,似乎SQL Data Project正在尝试验证它生成的SQL脚本,但它遇到了遇到包含$(的字符串的第一个实例。

示例1 INSERT INTO mytable (text) VALUES ('$(')

这会导致错误

  

在解析$('时遇到了错误的语法。

示例2 INSERT INTO mytable (text) VALUES ('$(this')

这会导致错误

  

在$(正在解析此'时遇到了错误的语法。

它似乎是SQL数据项目解析验证中的一个错误,即使脚本在SQL Management Studio中正常运行,也会阻止部署成功。

更新 我尝试了一些想法,似乎问题是在SQL数据项目解析字符串并遇到$(时。此外,$(在字符串中的所有内容都会被错误捕获,直到下一个单引号实例(无论是转义单引号还是字符串单引号的结尾)

3 个答案:

答案 0 :(得分:4)

SQL Data Tools为部署数据库生成的脚本似乎使用$()作为进行变量替换的方法。要纠正这个问题,我必须用

替换字符串的内容

CHAR(36) + '()' 代表 $()

这样解析器就不会尝试将其视为变量。

答案 1 :(得分:1)

您可以尝试这样: -

INSERT INTO mytable (text) VALUES ('''I''''''m Sure this broke things''')

如果从SQL插入,您也可以尝试: -

DECLARE @Value varchar(50)
SET @Value = 'I''m Sure this broke things'
INSERT INTO Table1 (Column1) VALUES (@Value)

如果您使用的是ADO.NET,请尝试这样:

using (SqlConnection conn = new SqlConnection(connectionString)) {
    conn.Open();
    using (SqlCommand command = conn.CreateCommand()) {
        command.CommandText = "INSERT INTO Table1 (text) VALUES (@Value)";

        command.Parameters.AddWithValue("@Value", "'I''m Sure this broke things'");

        command.ExecuteNonQuery();
    }
}

答案 2 :(得分:0)

DECLARE @data varchar(50)
SET @data = 'I''m Sure this broke things'
INSERT INTO mytable (text) VALUES (@data)