コード例 #1
0
        internal static SqlGenerator InsertScalar(SqlSession sqlSession, DbSelectStatement statement, bool outputIdentity, out SqlParameter scopeIdentityParam)
        {
            var result     = new SqlGenerator(sqlSession.SqlVersion);
            var model      = statement.Model;
            var sqlBuilder = result.SqlBuilder;

            if (model.IsIdentitySuspended())
            {
                SetIdentityInsert(sqlBuilder, model, true);
            }

            BuildInsertIntoClause(sqlBuilder, model, statement.Select);

            if (statement.Select.Count > 0)
            {
                statement.Accept(result);
            }

            if (model.IsIdentitySuspended())
            {
                SetIdentityInsert(sqlBuilder, model, false);
            }

            if (outputIdentity)
            {
                var sqlType = SqlType.BigInt(new _Int64());
                scopeIdentityParam = sqlType.CreateSqlParameter("@scopeIdentity", ParameterDirection.Output, null, sqlSession.SqlVersion);

                sqlBuilder.AppendLine();
                sqlBuilder.Append("SET @scopeIdentity = CAST(SCOPE_IDENTITY() AS BIGINT);");
            }
            else
            {
                scopeIdentityParam = null;
            }

            return(result);
        }