我有一个从我的生产数据库的模式创建的SQL数据项目。它将所有存储过程引入到项目中,并且我尝试将生成的脚本部署到localdb以进行脱机开发。
问题是,似乎SQL Data Project正在尝试验证它生成的SQL脚本,但它遇到了遇到包含$(
的字符串的第一个实例。
示例1
INSERT INTO mytable (text) VALUES ('$(')
这会导致错误
在解析$('时遇到了错误的语法。
示例2
INSERT INTO mytable (text) VALUES ('$(this')
这会导致错误
在$(正在解析此'时遇到了错误的语法。
它似乎是SQL数据项目解析验证中的一个错误,即使脚本在SQL Management Studio中正常运行,也会阻止部署成功。
更新
我尝试了一些想法,似乎问题是在SQL数据项目解析字符串并遇到$(
时。此外,$(在字符串中的所有内容都会被错误捕获,直到下一个单引号实例(无论是转义单引号还是字符串单引号的结尾)
答案 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)