5

我有一个从我的生产数据库架构创建的 SQL 数据项目。它将所有存储过程引入项目,我正在尝试将生成的脚本部署到 localdb 以进行离线开发。

问题是 SQL 数据项目似乎正在尝试验证它生成的 SQL 脚本,但它在遇到包含$(.

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

这会导致错误

解析 $(' 时遇到不正确的语法。

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

这会导致错误

解析 $(this' 时遇到不正确的语法。

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

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

4

3 回答 3

4

似乎 SQL Data Tools 为部署数据库而生成的脚本$()用作进行变量替换的一种方式。为了纠正这个问题,我不得不将字符串的内容替换为

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

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

于 2013-10-17T14:03:20.270 回答
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();
    }
}
于 2013-10-15T16:17:12.970 回答
0
DECLARE @data varchar(50)
SET @data = 'I''m Sure this broke things'
INSERT INTO mytable (text) VALUES (@data)
于 2013-10-15T16:19:41.580 回答